객체지향프로그래밍 -> 함수형프로그래밍으로
프론트엔드는 트렌드가 옮겨갔다.
근데 함수형프로그래밍에선
this class
는 보이지 않지만
앞으로 Legacy code
들을 볼 때도 봐야할 친구들이다.
즉 이 둘을 알고는 있어야 한다.
굳이 중요하다면 Scope
이 중요하지만 this class
는 알고는 있어야 한다.
this
란 무엇인가?
this
는 어떤 특정 객체를 가리키고 있는 값입니다.
this
는 함수가 어떻게 호출되느냐에 따라 동적으로 가리키는 객체가 결정된다.
함수가 호출되는 시점이 동적으로 가리키는 시점이다.
this
의 바인딩 규칙
this
에 객체가 들어갈때 바인딩 되는 걸 표한한다.
즉 정확하게 지칭되었을 때 바인딩이라는 말을 합니다.
규칙 4가지가 있는데
- 기본 바인딩 : 기본으로 this를 쓰면 전역객체를 가져간다
- 암묵적 바인딩 :
호출했을 때 호출한 주체가 누군지 판단하여 따라가는 기본 바인딩이다.
call apply bind
'new 키워드를 통해 생성자 함수를 호출할 때,
생성자 함수 내부의 this는 새로 생성되는 객체 인스턴스를 가리킨다.
생성자 함수 내에서 그냥 키워드만 쓴다면
인스턴스를 만드는게 아닌 그대로 가져온다는 뜻이다.
this
this
의 상위 스코프가 const person = {}
this
의 상위 스코프는 무조건 함수 스코프이다depth
가 아닌 그 위의 함수 스코프를 이야기한다.클래스란 무엇인가?
클래스는 객체 지향 프로그래밍 중요 개념으로
객체 생성하기 위한 템플릿 역할을 합니다.
클래스 기본 구조는
JS
에서 클래스는 class
키워드로 선언하고,
class
선언은 class
로 한다.
클래스는 인스턴스는 붕어빵 틀이다.
인스턴스는 붕어빵을 만드는 과정이 끝나고 난 결과를 담고 있다.
따라서 인스턴스는 실물이다.
* 클래스의 메소드 정의 시 화살표 함수가 아닌 일반 함수
를 써야만 this가 인스턴스를 가리킬 수 있습니다.
인스턴스에 의존하면 동적 메소드고
인스턴스와 무관하게 작동하면 정적 메소드이다.
동적 메소드
console.log(user1.getUserInfo());
정적 메소드
console.log(User.compareAges(user1,user2));
스코프는 변수와 함수가 유효한 범위를 의미한다.
JS에서는 함수 스코프와 블록스코프가 사용됩니다.
함수 내에서 선언된 변수는 함수 내에서만 유효하다는 것을 의미한다.
let
과 const
는 블록 스코프 밖에서는 접근할 수 없다.
그래서 let
과 const
를 사용한다.
functiopn first() {
const y = 20;
second();
}
function second() {
console.log(y)
}
first();
second();
아래의 결과가 5,5 인데 왜 second
의 결과가 5이냐
second();
라고 했을 때,
()
안에 function second(){}
가 들어있다고 생각해서는 안된다.
변수 참조는 항상 선언된 위치에서 찾아간다.
그러니 second()
라고 해서 그 안에 console.log(y)
가 있다고 생각하면 안된다
실행은 second()
고 선언된 위치에서 스코프를 계산해야 한다.