this

this는 클래스로 생성한 인스턴스를 의미한다.

전역 환경에서 this는 전역 객체를 가르킨다.

런타임 환경에 따라 node에서 this는 global를 가르키고, browser에서 this는 window를 가르킨다.

 

함수, 메서드에서의 this

// 함수
// 호출 주체를 명시할 수 없기 때문에 this는 전역 객체를 의미
var func = function (x) {
    console.log(this, x);
};

func(1); // global { ... } 1

// 메서드
// 호출 주체를 명시할 수 있어서 this는 해당 객체를 의미한다.
var obj = {
    method: func
};

obj.method(2); // { method:f } 2

 

함수를 호출했을 경우 그 함수 내부의 this는 지정되지 않는다. this가 지정되지 않으면, 전역 객체를 가르키기 때문에

함수를 호출하면 함수 내부에서의 this는 전역 객체가 된다.

 

반면, 메서드를 호출하면 메서드를 호출한 대상이 있기 때문에 이 때의 this는 호출한 객체를 의미한다.

 

var obj = {
    name: 'jung',
    outer: function () {        
        var innerFunc = function () {
            console.log(this); 
        }

        innerFunc();        
    }
};

obj.outer();

 

위 코드에서도 비록 객체 안에 innerFunc() 함수가 있지만

innterFunc() 를 호출하면 this는 전역객체가 된다.

 


 

화살표 함수

ES6에서 도입된 화살표 함수는 this 바인딩 과정 자체가 없어서 this가 존재하지 않는다.

대신, 화살표 함수는 선언될 시점의 상위 스코프가 this로 바인딩된다.

 

obj1 = {
    name: 'jung',
    outer: function () {
        const inner = () => {
            console.log(this);
        }

        inner();
    }
};

obj1.outer();

 

innerFunc를 일반 함수에서 화살표 함수로 바꾼후, 출력하면

this가 전역객체가 아니고 outer: function()으로 바뀐것을 볼 수 있다.

 

obj2 = {
    name: 'jung',
    outer: () => {
        console.log(this)
    }
}

obj2.outer();

 

주의할 점은 앞서 언급했던 선언될 시점에서 상위 스코프가 this로 바인딩 된다는 점인데,

위 코드 처럼 function()으로 감싸주지 않으면 this는 전역객체로 대응된다.

 


콜백 함수

콜백함수에서의 this는 기본적으로 지정되지 않기 때문에 전역객체를 바라본다.

[1, 2, 3, 4, 5].forEach(function (x) {
    console.log(this, x);
});

 

위 코드를 실행해보면 global 전역객체에 대한 정보가 출력되는것을 확인할 수 있다.

'Javascript' 카테고리의 다른 글

[Javascript] 프로토타입 ( Prototype )  (0) 2024.08.22
[Javascript] Random - 난수 생성하기  (0) 2024.08.21
[Javascript] Map  (0) 2024.08.19
[Javascript] 소수 올림, 내림, 반올림  (0) 2024.08.19
[Javascript] var, let, const  (0) 2024.08.12

오늘의 목표

더보기

✔️ 프로그래머스 코딩 문제 풀이

❌ 자바스크립트 4주차 강의까지


⏱️ 오늘의 일정

9:00 ~ 13:00  - 프로그래머스 코딩 문제 풀이 

13:00 ~ 14:00 - 점심시간

14:00 ~ 21:00 - 자바스크립트 4주차 강의, 알고리즘 유튜브 강의 


📜 프로그래머스 코딩 문제 풀이

9:00 ~ 13:00  - 프로그래머스 코딩 문제 풀이 

 

오늘도 역시 시작은 코딩 문제 풀이로 시작!

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12926.%E2%80%85%EC%8B%9C%EC%A0%80%E2%80%85%EC%95%94%ED%98%B8

 

AlgorithmCodingTest/프로그래머스/1/12926. 시저 암호 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/81301.%E2%80%85%EC%88%AB%EC%9E%90%E2%80%85%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC%E2%80%85%EC%98%81%EB%8B%A8%EC%96%B4

 

AlgorithmCodingTest/프로그래머스/1/81301. 숫자 문자열과 영단어 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12915.%E2%80%85%EB%AC%B8%EC%9E%90%EC%97%B4%E2%80%85%EB%82%B4%E2%80%85%EB%A7%88%EC%9D%8C%EB%8C%80%EB%A1%9C%E2%80%85%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0

 

AlgorithmCodingTest/프로그래머스/1/12915. 문자열 내 마음대로 정렬하기 at main · YamSaeng/AlgorithmCod

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com


📜 자바스크립트 4주차 강의, 알고리즘 유튜브 강의 

14:00 ~ 21:00 - 자바스크립트 4주차 강의, 알고리즘 유튜브 강의 

 

자바스크립트 강의를 4주차 강의 까지 들으려 했지만, 3주차까지 밖에 듣지 못했다..

강의 중간중간에 궁금한 점을 물어보고, 구글링도 하느라.. 내일까지는 꼭 4주차 까지 완강 하겠다.

 

슬슬 코테 문제 푸는데 약간 어려움이 있어서

알고리즘 유튜브 강의를 찾아보던 중에 BaarkingDog님의 강의를 추천받아서 보게되었다.

https://www.youtube.com/@BaaaaaaaaaaaaaaaaaaaaarkingDog/videos

 

BaaarkingDog

 

www.youtube.com

 

오늘의 목표

더보기

✔️ 프로그래머스 코테 문제 풀이

✔️ 자바스크립트 2주차 강의까지


⏱️ 오늘의 일정

9:00 ~ 10:00  - CH 2 발제

10:00 ~ 13:00 - 프로그래머스 코테 문제 풀이
13:00 ~
21:00 - 자바스크립트 2주차 강의까지


📜 CH 2 발제

9:00 ~ 10:00  - CH 2 발제

 

2주차에 진입했다.

캠프에서 제공되는 Javascript 강의를 듣고 개인공부를 하는 주차이다.

팀은 다음주인 3주차에 바뀐다는 소식도 들었다.


 

📜 프로그래머스 코테 문제 풀이

9:00 ~ 12:00 - 프로그래머스 코테 문제 풀이

 

오늘은 Javascript 강의를 듣기 위해 3개 정도만 풀고 강의에 집중했다.

 

1. 이상한 문자 만들기

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12930.%E2%80%85%EC%9D%B4%EC%83%81%ED%95%9C%E2%80%85%EB%AC%B8%EC%9E%90%E2%80%85%EB%A7%8C%EB%93%A4%EA%B8%B0

 

AlgorithmCodingTest/프로그래머스/1/12930. 이상한 문자 만들기 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

2. 삼총사

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/131705.%E2%80%85%EC%82%BC%EC%B4%9D%EC%82%AC

 

AlgorithmCodingTest/프로그래머스/1/131705. 삼총사 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

3. 크기가 작은 부분 문자열

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/147355.%E2%80%85%ED%81%AC%EA%B8%B0%EA%B0%80%E2%80%85%EC%9E%91%EC%9D%80%E2%80%85%EB%B6%80%EB%B6%84%EB%AC%B8%EC%9E%90%EC%97%B4

 

AlgorithmCodingTest/프로그래머스/1/147355. 크기가 작은 부분문자열 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 


📜 자바스크립트 2주차 강의까지 

12:00 ~ 21:00 - 자바스크립트 2주차 강의까지

 

캠프에서 제공해준 Javascript 문법 종합반 2주차 강의까지 들었다.

내일은 4주차까지 들을 예정.

 

🌙 하루를 마치며

본격적인 Javascript 공부 주차를 맞게 되었다.

인강 강의에는 매우 만족스럽지만 하는김에 자바스크립트 책을 구매해 추가로 살펴볼 예정!

 

https://www.yes24.com/Product/Goods/92742567

 

모던 자바스크립트 Deep Dive - 예스24

『모던 자바스크립트 Deep Dive』에서는 자바스크립트를 둘러싼 기본 개념을 정확하고 구체적으로 설명하고, 자바스크립트 코드의 동작 원리를 집요하게 파헤친다. 따라서 여러분이 작성한 코드

www.yes24.com

구글링 하던 중에 모던 자바스크립트 Deep Diver 라는 책이 평이 좋아서 구입해서 봐야겠다.

 

Javascript에서 변수를 선언하는 방법은 3가지가 있다.

var

es6 문법 도입 이전까지 변수 선언에 사용한 키워드 ( 재선언 가능, 재할당 가능 )

var a = 1;
console.log(a); // 1

var a = 2;
console.log(a); // 2

 

똑같은 이름의 변수를 선언하고 초기화 하더라도 에러가 나지 않는다.

var 키워드는 변수의 재선언, 재할당 모두 가능하기 때문에 코드양이 많아지게 되면 그만큼 유지 관리가 힘들다.

 


let

es6에서 도입된 변수 선언에 사용하는 키워드 ( 재선언 불가, 재할당 가능 )

let a = 1;
console.log(a);

let a = 2; // SyntaxError: Identifier 'a' has already been declared
console.log(a);

 

var 과는 달리 똑같은 이름으로 변수를 선언하면 이미 정의되어 있어서 선언할 수 없다는 에러 메시지를 띄운다.

console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = "a"

 

또한 let 키워드는 호이스팅시 변수를 초기화 하지 않고,

위 코드 처럼 b를 초기화하기 전에 액세스 할 수 없다는 에러 메세지를 띄운다.

 


const

es6에서 도입된 키워드. ( 재선언 불가, 재할당 불가 )

변수 값을 상수로 변경한다.

 

const a = 1;
a = 2; // TypeError: Assignment to constant variable

 

상수 값이므로 재할당하지 못한다.let과 마찬가지로 호이스팅시 변수를 초기화 하지 않는다.

 

 

 

참조 : https://developer.mozilla.org/ko/docs/Glossary/Hoisting

 

호이스팅 - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN

JavaScript 호이스팅은 인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위의 맨 위로 끌어올리는 것처럼 보이는 현상을 뜻합니다.

developer.mozilla.org

 

'Javascript' 카테고리의 다른 글

[Javascript] 프로토타입 ( Prototype )  (0) 2024.08.22
[Javascript] Random - 난수 생성하기  (0) 2024.08.21
[Javascript] Map  (0) 2024.08.19
[Javascript] 소수 올림, 내림, 반올림  (0) 2024.08.19
[Javascript] this  (0) 2024.08.14

오늘의 목표

더보기

✔️ 프로그래머스 코테 문제 풀기

✔️ 팀 프로젝트 발표

✔️ KPT 작성


⏱️ 오늘의 일정

9:00 ~ 12:00 - 프로그래머스 코테 문제 풀기
12:00 ~ 13:00 - 팀 프로젝트 발표 준비

13:00 ~ 14:00 - 점심시간

14:00 ~ 16:00 - 팀 프로젝트 발표

16:00 ~ 17:00 - KPT 작성

17:00 ~ 18:00 - 저녁시간

18:00 ~ 21:00 - 개인 공부


📜 프로그래머스 코테 문제 풀기

9:00 ~ 12:00 - 프로그래머스 코테 문제 풀기

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12950.%E2%80%85%ED%96%89%EB%A0%AC%EC%9D%98%E2%80%85%EB%8D%A7%EC%85%88

 

AlgorithmCodingTest/프로그래머스/1/12950. 행렬의 덧셈 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12969.%E2%80%85%EC%A7%81%EC%82%AC%EA%B0%81%ED%98%95%E2%80%85%EB%B3%84%EC%B0%8D%EA%B8%B0

 

AlgorithmCodingTest/프로그래머스/1/12969. 직사각형 별찍기 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12940.%E2%80%85%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98%EC%99%80%E2%80%85%EC%B5%9C%EC%86%8C%EA%B3%B5%EB%B0%B0%EC%88%98

 

AlgorithmCodingTest/프로그래머스/1/12940. 최대공약수와 최소공배수 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

최대 공약수와 최소 공배수를 보다 쉽게 구할 수 있는 유클리드 호제법을 발견해 따로 정리했다

2024.08.09 - [수학] - [수학] 유클리드 호제법 ( 최대 공약수, 최소 공배수 구하기 )

 

[수학] 유클리드 호제법 ( 최대 공약수, 최소 공배수 구하기 )

유클리드 호제법은 '2개의 자연수 a, b에 대해 a를 b로 나눈 나머지를 r이라 하면 ( 단, a > b ),a와 b의 최대공약수는 b와 r의 최대공약수와 같다.' 라는 성질을 활용해 두 수의 최대공약수 ( GCD )를 구

program-yam.tistory.com

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/68935.%E2%80%853%EC%A7%84%EB%B2%95%E2%80%85%EB%92%A4%EC%A7%91%EA%B8%B0

 

AlgorithmCodingTest/프로그래머스/1/68935. 3진법 뒤집기 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

📜 팀프로젝트 발표 준비

12:00 ~ 13:00 - 팀 프로젝트 발표 준비

 

오후 2시에 팀 발표가 있었다. 맨 처음 발표라서 발표 전에 ppt와 시연 영상을 최종으로 점검 했다.

 

📜 팀프로젝트 발표 

14:00 ~ 16:00 - 팀 프로젝트 발표

 

오후 2시 부터 팀 발표를 시작했다.

구현한 웹페이지와 추가한 기능, 구현하면서 어려웠던 점을 주요 내용으로 발표했다.

튜터님의 간단한 피드백을 받고 다른 팀들의 발표도 보았는데 퀄리티가 높은 팀들도 몇몇 팀이 있었다.

( 웹페이지 개발에 경험이 많이 있으신듯.. )

 

📜 KPT 작성

16:00 ~ 17:00 - KPT 작성

 

처음 들어보는 용어라 검색해보니 일종의 회고록 비슷한 느낌이였다.

팀원들끼리 회의해서 각자 Keep, Problem, Try에 추가할만한 것들을 작성하고,

팀장님에게 전달해 제출했다.

 

📜 개인 공부

18:00 ~ 21:00 - 개인 공부

 

2주차 강의인 Javascript 가 제공되어서 강의를 들었다.

 

🌙 하루를 마치며

1주차 팀프로젝트가 끝났다.

다음주 2주차에는 새로운 팀으로 다른 프로젝트를 진행한다고 전달 받았다.

주말에는 이번 주차간 들었던 강의들을 모두 정리하는 시간으로 보낼 예정!

유클리드 호제법은 '2개의 자연수 a, b에 대해 a를 b로 나눈 나머지를 r이라 하면 ( 단, a > b ),

a와 b의 최대공약수는 b와 r의 최대공약수와 같다.' 라는 성질을 활용해 두 수의 최대공약수 ( GCD )를 구하는 방법이다.


최대 공약수 ( GCD ) 구하기

  • a와 b를 나눈 나머지를 r이라고 하자. ( a >= b , 0 <= r < b )
  • a와 b의 최대공약수를 ( a, b ) 라고 하면, 다음이 성립한다.
  • ( a, b ) = ( b, r )
  • 위의 방식으로 나머지가 0이 될 때까지 반복하면 최대 공약수를 구할 수 있다.
function FindGcd(a, b) {
    var remainder = a % b;
    if (remainder == 0) {
        return b;
    }

    return FindGcd(b, remainder);
}

 

최소 공배수( LCM ) 구하기

a, b에 대해서 최소 공배수와 최대 공약수는 a * b = GCD * LCM 을 만족한다.

따라서 최소 공배수 ( LCM )는 a * b / GCD를 사용해 구할 수 있다.

var lcm = (a * b) / findGcd(a,b);

 

 

출처

 

유클리드 호제법 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란

ko.wikipedia.org

 

 

오늘의 목표

더보기

✔️ 프로그래머스 코테 문제 풀기

✔️ 팀 프로젝트 웹 개발 팝업창 띄우기

✔️ 인프런 CS 강의 듣기


⏱️ 오늘의 일정

9:00 ~ 12:00 - 프로그래머스 코테 문제 풀기

12:00 ~ 13:00 - 팀 회의

13:00 ~ 17:00 - 팀 프로젝트 웹 개발 팝업창 띄우기

17:00 ~ 21:00 - 개인 공부


📜 프로그래머스 코테 문제 풀기

9:00 ~ 12:00 프로그래머스 코테 문제 풀기

 

어제 다짐 했던거 처럼 5가지의 문제를 풀었다.

아직은 레벨 1단계라 크게 어려움은 없었다.

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/70128.%E2%80%85%EB%82%B4%EC%A0%81

 

AlgorithmCodingTest/프로그래머스/1/70128. 내적 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/77884.%E2%80%85%EC%95%BD%EC%88%98%EC%9D%98%E2%80%85%EA%B0%9C%EC%88%98%EC%99%80%E2%80%85%EB%8D%A7%EC%85%88

 

AlgorithmCodingTest/프로그래머스/1/77884. 약수의 개수와 덧셈 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12917.%E2%80%85%EB%AC%B8%EC%9E%90%EC%97%B4%E2%80%85%EB%82%B4%EB%A6%BC%EC%B0%A8%EC%88%9C%EC%9C%BC%EB%A1%9C%E2%80%85%EB%B0%B0%EC%B9%98%ED%95%98%EA%B8%B0

 

AlgorithmCodingTest/프로그래머스/1/12917. 문자열 내림차순으로 배치하기 at main · YamSaeng/AlgorithmCod

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/82612.%E2%80%85%EB%B6%80%EC%A1%B1%ED%95%9C%E2%80%85%EA%B8%88%EC%95%A1%E2%80%85%EA%B3%84%EC%82%B0%ED%95%98%EA%B8%B0

 

AlgorithmCodingTest/프로그래머스/1/82612. 부족한 금액 계산하기 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12918.%E2%80%85%EB%AC%B8%EC%9E%90%EC%97%B4%E2%80%85%EB%8B%A4%EB%A3%A8%EA%B8%B0%E2%80%85%EA%B8%B0%EB%B3%B8

 

AlgorithmCodingTest/프로그래머스/1/12918. 문자열 다루기 기본 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

📜 팀 회의

12:00 ~ 13:00 - 팀 회의

 

오늘 18:00 시 까지는 코딩을 완료하고, PPT를 준비해야한다는 전체 공지를 받았다.

그 후, 간단한 미니 게임을 통해 발표 순서를 정하게 되었는데

우리 '2조' 가 가장 먼저 발표를 하게 되었다. 

 

팀 회의에서는 발표자를 뽑고 좀 더 추가 할 수 있는 기능은 없을 지 얘기하는 시간을 보냈다.

내가 맡은 방명록 팝업창 띄워서 처리하기 기능만 추가하면 웹페이지는 완성이였다.

 

📜 팀 프로젝트 웹 개발 팝업창 띄우기

13:00 ~ 17:00 - 팀 프로젝트 웹 개발 팝업창 띄우기

 

어제 문제가 되었던 점은 다음과 같다.

<script type="module"></script>

 

script에 module를 붙이면 해당 블럭이 독립된 공간이 되고 외부에서 함수를 호출하지 못하는 문제였다.

어떻게 해야 호출을 할 수 있을까?.. 고민을 하다가 우선은 html에서 자바스크립트(js)를 분리하기로 했다.

<script defer src="about.js"></script>

 

이처럼 스크립트를 분리해서 about.js에 따로 관리하도록 수정했다.

위처럼 만들고 웹페이지를 실행했는데 이번에는 Firebase에서 데이터를 받아오지 못하는 문제가 생겨버렸다..

 

Firebase 관련 오류

 

머리가 지끈지끈해지는 순간... 튜터님에게 가서 물어보니 결국에는 type="module"을 붙여야

Firebase를 사용할 수 있다는 설명을 듣게 되었다. 처음으로 돌아온 상황.. 

구글에서 좀 더 찾아보기로 했다.

 

javascript module function call 이라고 검색을 했더니

어느 외국사람이 질문 올린 글이 있었다.

https://stackoverflow.com/questions/69888029/how-to-call-a-function-declared-in-a-javascript-module-type-module-from-an-htm

 

How to call a function declared in a javascript module (type=module) from an html page

I am struggling to use javascript modules... I have an html file and a JS module. I have a function defined in the javascript file and I would like to call that function from my HTML page. This is my

stackoverflow.com

 

살펴보니 나처럼 함수를 호출하지 못하고 있는 문제였고,

위 글에서 발견한 export와 import를 찾아보게 되었다.

 

https://ko.javascript.info/import-export

 

모듈 내보내고 가져오기

 

ko.javascript.info

 

module에서 함수 앞에 export를 붙이면 해당 함수를 내보낼 수 있는 기능을 하는 지시자였고,

import는 반대로 해당 함수를 불러들일 수 있는 지시자였다.

 

export function GetGuestbookContent(Name, guestbookContentData, guestBookWindow) {
    if (!Name || !guestbookContentData) {
        alert('이름과 메시지를 모두 입력하세요.');
        return;
    }

    // Firebase DB에 저장
    DB_SaveGuestBookContent(Name, guestbookContentData, guestBookWindow);
}

 

 

<script type="module">
    import { GetGuestbookContent } from "./about.js"

    $("#guestBookPostingBtn").click(function () {
        let guestBookNameData = $("#guestBookName").val();
        let guestbookContentData = $("#guestBookContent").val();

        GetGuestbookContent(guestBookNameData, guestbookContentData, window);                  
    })

    $("#guestBookCloseBtn").click(function () {
        window.close();
    })
</script>

 

보내고자 하는 함수 앞에 export를 붙이고

해당 함수가 필요한 곳에 import를 사용해 불러들이니 데이터를 주고 받을 수 있게 되었다.

 

다행히도 만들고자 했던 방명록을 팝업창으로 띄워 정보를 받고,

받은 정보를 DB로 전송해 읽어들이는 부분을 완성 할 수 있게 되었다.

 

📜 개인 공부

17:00 ~ 21:00 - 개인 공부

 

팀프로젝트 개발 하느라 듣지 못했던 인프런 CS강의를 듣고

중간 중간 발표 PPT, 시연영상 체크를 하며 개인 공부 시간을 보냈다.

 

🌙 하루를 마치며

결국에는 팝업창을 띄워 정보를 처리 할 수 있게 된 것에 대해 매우 만족스러운 기분을 느꼇다.

내일 오후 2시에 발표 인데, 시작이 반이라는 것처럼 첫번째 팀 프로젝트 발표를 성공적으로 끝낼 수 있으면 좋겠다.

 

 

프로그래머스와 백준에서 알고리즘 문제를 풀고 제출하면,

자동으로 Git에 커밋하는 구글 확장 프로그램을 설치해보자!

 

https://bit.ly/3XR66UE

 

백준허브(BaekjoonHub) - Chrome 웹 스토어

Automatically integrate your BOJ submissions to GitHub

chromewebstore.google.com

 

우선, 위 링크로 가서 Chrome에 추가해준다.

 

크롬 주소창 오른쪽에 있는 퍼즐 모양을 눌러 백준허브를 클릭한다.

 

 

Git에 로그인 한후 아래와 같은 화면이 나온다.

 

새로 Repository를 생성해 연동하거나 이미 생성한 Repository를 연결한다.

위 그림은 이미 생성한 Repository를 연동하는 화면이다.

 

 

잘 연결된듯!

 

 

프로그래머스에서 제출 하면 빨간 네모 안이 로딩 되면서 체크 표시로 바뀐다.

그 후, Git에 가보면

 

 

연동이 잘 된것을 확인 할 수 있다

오늘의 목표

더보기

✔️ 인프런 CS 관련 강의 찾고 결제하기

✔️ 프로그래머스 알고리즘 문제 풀기

✔️ 팀 프로젝트 진행


⏱️ 오늘의 일정

9:00 ~ 10:00 - 알고리즘 문제 풀기

10:00 ~ 13:00 - 팀 프로젝트 진행

13:00 ~ 14:00 - 점심시간

15:00 ~ 15:30 - 전수 면담

15:30 ~ 21:00 - 개인 공부


📜 알고리즘 문제 풀기

9:00 ~ 10:00 - 알고리즘 문제 풀기

 

캠프에서 제공하는 알고리즘 문제를 2가지를 풀었다.

( 아직은 쉬운편이라서 좀 더 풀긴 해야 할듯.. )

 

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12903.%E2%80%85%EA%B0%80%EC%9A%B4%EB%8D%B0%E2%80%85%EA%B8%80%EC%9E%90%E2%80%85%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0

 

AlgorithmCodingTest/프로그래머스/1/12903. 가운데 글자 가져오기 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12922.%E2%80%85%EC%88%98%EB%B0%95%EC%88%98%EB%B0%95%EC%88%98%EB%B0%95%EC%88%98%EB%B0%95%EC%88%98%EB%B0%95%EC%88%98%EF%BC%9F

 

AlgorithmCodingTest/프로그래머스/1/12922. 수박수박수박수박수박수? at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

 

https://bit.ly/3XR66UE

 

백준허브(BaekjoonHub) - Chrome 웹 스토어

Automatically integrate your BOJ submissions to GitHub

chromewebstore.google.com

 

 

블로그 글을 보고 백준 허브 확장 프로그램을 알게 되었다.

Git과 연동되어 백준이나 프로그래머스 문제를 풀면 자동으로 Git에 연동되고 메모리 사용량, 속도 등을 기록해줘서

매우 편하다.

 

📜 팀 프로젝트 진행

9:00 ~ 10:00 - 팀 프로젝트 진행

 

웹개발 종합반에서 배운 내용을 토대로 기본적인 생성, 삭제, 수정을 할 수 있는 웹페이지를 만들었다.

내가 맡은 부분은 전체적인 틀을 보고 부족한 부분을 채우는 부분과

방명록을 팝업창을 띄워서 정보를 입력하고, 받은 정보로 방명록 카드를 생성하는 부분을 맡았다.

 

방명록을 팝업창으로 생성하는 부분에서 막히는 부분이 있는데 다음과 같다.

 

메인 화면

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

    <script type="module">
        $('#guestbookbtn').click(function () {
            window.open("test_child.html", "_blank", `width=1000, height=600, toolbars=no, scrollbars=no`);
            console.log(guestbookContent);
        });

        function guestbookContent(data) {
            console.log(data);
        }   
    </script>
</head>

<body>
    <button id="guestbookbtn">자식 창 열기</button><br>
    <h4 id="data_from_child">받아온 데이터 : </h4>
</body>

</html>

 

 

자식 화면

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    <style>
        @import url('https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap');

        * {
            font-family: 'Gowun Dodum', sans-serif;
        }

        .myguestbookbox {
            border-radius: 10px;
            box-shadow: 0px 0px 3px 0px rgb(0, 0, 0);
            width: 400px;
            height: 500px;
            margin: 30px auto 20px auto;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
        }
    </style>

    <script type="module">                      
        $("#guestbookWriteBtn").click(function () {           
                        
            let guestbookContentData = $("#guestbook-content").val();            
            opener.guestbookContent(guestbookContentData);
            window.close();
        })        
    </script>

</head>

<body>
    <div class="myguestbookbox">
        <h3>방명록 작성하기</h3>
        <div class="form-floating mb-3">
            <input type="text" class="form-control" id="guestbook-name" placeholder="이름" required>
            <label for="guestbook-name">이름</label>
        </div>
        <div class="form-floating mb-3" style="width: 300px; height:300px">
            <textarea class="form-control" id="guestbook-content" placeholder="내용" required
                      style="height:300px"></textarea>
            <label for="guestbook-content">내용</label>
        </div>
        <div class="mybtn">
            <button type="button" class="btn btn-dark" id="guestbookWriteBtn">작성하기</button>
            <button type="button" class="btn btn-outline-dark" id="close-guestbook">닫기</button>
        </div>
    </div>    
</body>

</html>

 

자식 화면에서 작성하기를 누르면 opener의 guestbookContent()를 호출해 데이터를 전달하는 테스트 코드다.

문제는 opener의 guestbookContent가 정의가 되어 있지 않다고 계속 오류가 발생하는 지점이다.

 

guestbookContent를 찾을 수 없다고 나오는 에러

 

어느 부분이 문제인지 파악하기 위해 부모쪽을 수정했는데

 

수정한 부모 화면

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

    <script>
        function OpenChild() {
            window.open("test_child.html", "_blank", `width=1000, height=600, toolbars=no, scrollbars=no`);
        }

        function guestbookContent(data) {
            console.log(data);
        }
    </script>

</head>

<body>
    <button id="guestbookbtn" onclick="OpenChild()">자식 창 열기</button><br>
    <h4 id="data_from_child">받아온 데이터 : </h4>
</body>

</html>

 

 

<script type="module">

 

<script type="module"> 를 제거하고 <script>로 수정

function OpenChild() {
    window.open("test_child.html", "_blank", `width=1000, height=600, toolbars=no, scrollbars=no`);
}

 

<script type="module"> 제거로 인해 JQuery를 사용하지 못해서 ( 자식 창 열기 ) 버튼에 OpenChild() 함수를

onclick으로 할당했다.

 

이렇게 수정하고 실행을 하니 이번에는 guestbookContent()가 잘 실행이 된다.. 

 

아마도 <script type="module">를 제거하고 다른 방식으로 사용하면 되는거 같은데,

왜 <script type="module">를 선언하면 guestbookContent()를 찾지를 못하는 건지 궁금해서

혼자 구글링해보다가 튜터님한테 가서 물어보게 되었다.

 

<script type="module">

 

이렇게 type = "module"로 지정하면 해당 <script> 블럭이 완전 독립적인 스코프로 지정되어 

외부에서는 guestbookContent()를 호출하지 못한다는게 튜터님의 설명이였다.

 

근데 현재 메인 화면 작업은 전부 JQuery를 사용하기 때문에 type="module"를 붙이기는 해야하는데..

다른 방식을 사용해 방명록 팝업창을 구현해봐야 할듯..

 

📜 전수 면담

15:00 ~ 15:30 - 전수 면담

 

튜터님과의 짧은 면담이 있었다.

개발경험, 공부 가능한 시간 등등 

 

📜 개인 공부

15:30 ~ 21:00 개인 공부

 

https://www.inflearn.com/course/%EB%84%93%EA%B3%A0%EC%96%95%EA%B2%8C-%EC%BB%B4%EA%B3%B5-%EC%A0%84%EA%B3%B5%EC%9E%90

 

넓고 얕게 외워서 컴공 전공자 되기 강의 | 널널한 개발자 - 인프런

널널한 개발자 | 넓고 얕게 외워서 컴퓨터 공학 전공자가 되고 싶은 모든 비전공 초보자를 위한 강의입니다. 컴퓨터 구조, 운영체제 등 컴퓨터 공학 전공 필수과목에서 어떤 것을 배울 수 있는지

www.inflearn.com

 

평가도 괜찮고 다시 한번 정리할겸 CS 강의 시작으로 결제했다. 

자기전까지는 완강 목표 !!

 

🌙 하루를 마치며

이번에야말로 CS 공부를 인강으로 확실하게 정리해야겠다고 마음을 먹었다.

팀 발표가 금요일이라 방명록 팝업창 띄우는게 급하긴 한데... 내일은 방법을 찾아 해결하도록 노력해야겠다.

방법을 못 찾으면 현재 방식대로 방명록을 작성해도 괜찮으니 약간은 부담감을 내려놓고 짱구를 잘 굴려봐야겠다.

오늘의 목표

더보기

✔️ [왕초보] 웹개발 5주차 완강

✔️ 팀 프로젝트 웹 개발 참가


⏱️ 오늘의 일정

9:00 ~ 10:00 - [왕초보] 웹개발 5주차
10:00 ~ 11:00 - Git 특강

11:00 ~ 13:00 - [왕초보] 웹개발 5주차

13:00 ~ 14:00 - 점심시간

15:00 ~ 18:00 - 팀 프로젝트 웹 개발

18:00 ~ 19:00 - 저녁시간

19:00 ~ 21:00 - 팀 프로젝트 웹 개발


📜 [왕초보] 웹개발 5주차 강의 듣기

9:00 ~ 10:00 웹 개발 5주차 강의

11:00 ~ 13:00 웹 개발 5주차 강의

 

다행히도 점심 전에는 완강 할 수 있었다.

웹개발에서 들은 내용들은 따로 글을 작성할 예정!

 

📜 Git 특강

10:00 ~ 11:00 Git 특강

 

튜터님의 온라인 세션으로 Git 특강을 듣게 되었다.

Git은 평소에도 자주 쓰는 툴로 내용은 알아듣기 쉬웠고,

보통은 혼자 사용하느라 Branch도 만들지 않고 사용했는데,

full request라는 기능을 처음 들어서 유용한 시간이었다.

 

앞으로 Branch로 작업해서 충돌도 나보고 Main으로 올려보면서 연습을 많이 해야겠다

 

📜  팀 프로젝트 웹 개발

15:00 ~ 21:00 - 팀 프로젝트 웹 개발

 

점심시간에 밥은 대충 먹고 다이소에 가서 마이크와 웹캠을 사왔다.

팀 회의로 리더도 정하고, 중간에 튜터님한테 찾아가서 팀 프로젝트에서 각 팀원들이 담당할 부분에 관한 조언도 들었다.

약간 두루뭉실한 부분도 있었지만 팀원들 나름대로 각자 작업을 맡았다.


🌙 하루를 마치며

 

내일부터는 CS 공부와 코테도 다시 시작해야겠다.

+ Recent posts