TIL 29 / 30일차

minjun kim·2024년 10월 30일
0

객체지향 / 함수형

객체지향프로그래밍 -> 함수형프로그래밍으로
프론트엔드는 트렌드가 옮겨갔다.

근데 함수형프로그래밍에선
this class는 보이지 않지만

앞으로 Legacy code들을 볼 때도 봐야할 친구들이다.
즉 이 둘을 알고는 있어야 한다.

굳이 중요하다면 Scope이 중요하지만 this class는 알고는 있어야 한다.


This

this란 무엇인가?
this는 어떤 특정 객체를 가리키고 있는 값입니다.
this는 함수가 어떻게 호출되느냐에 따라 동적으로 가리키는 객체가 결정된다.
함수가 호출되는 시점이 동적으로 가리키는 시점이다.

this의 바인딩 규칙

this에 객체가 들어갈때 바인딩 되는 걸 표한한다.
즉 정확하게 지칭되었을 때 바인딩이라는 말을 합니다.

규칙 4가지가 있는데

  1. 기본 바인딩 : 기본으로 this를 쓰면 전역객체를 가져간다
  2. 암묵적 바인딩 :
    호출했을 때 호출한 주체가 누군지 판단하여 따라가는 기본 바인딩이다.
  1. 명시적 바인딩 : call apply bind'

new 바인딩

new 키워드를 통해 생성자 함수를 호출할 때,
생성자 함수 내부의 this는 새로 생성되는 객체 인스턴스를 가리킨다.
생성자 함수 내에서 그냥 키워드만 쓴다면
인스턴스를 만드는게 아닌 그대로 가져온다는 뜻이다.

  • 화살표 함수에서의 this
    예를 들어 this의 상위 스코프가 const person = {}
    객체 안에 들어있다고 친다면 this의 상위 스코프는 무조건 함수 스코프이다
    상위 스코프는 객체의 depth가 아닌 그 위의 함수 스코프를 이야기한다.

Class

클래스란 무엇인가?
클래스는 객체 지향 프로그래밍 중요 개념으로
객체 생성하기 위한 템플릿 역할을 합니다.

클래스 기본 구조는

JS에서 클래스는 class 키워드로 선언하고,
class 선언은 class로 한다.

클래스는 인스턴스는 붕어빵 틀이다.
인스턴스는 붕어빵을 만드는 과정이 끝나고 난 결과를 담고 있다.
따라서 인스턴스는 실물이다.

* 클래스의 메소드 정의 시 화살표 함수가 아닌 일반 함수
를 써야만 this가 인스턴스를 가리킬 수 있습니다.

인스턴스에 의존하면 동적 메소드고
인스턴스와 무관하게 작동하면 정적 메소드이다.

동적 메소드
console.log(user1.getUserInfo());

정적 메소드
console.log(User.compareAges(user1,user2));


상속과 다향성

Scope

스코프는 변수와 함수가 유효한 범위를 의미한다.
JS에서는 함수 스코프와 블록스코프가 사용됩니다.

함수 스코프

함수 내에서 선언된 변수는 함수 내에서만 유효하다는 것을 의미한다.

letconst는 블록 스코프 밖에서는 접근할 수 없다.
그래서 letconst를 사용한다.


스코프체인

렉시컬스코프

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()고 선언된 위치에서 스코프를 계산해야 한다.

0개의 댓글

관련 채용 정보