JavaScript 객체 지향 프로그래밍에서 메서드 코드의 컨텍스트 손실

클래스 메서드의 원본 코드를 사용할 때 컨텍스트가 손실될 수 있습니다. 예제를 통해 살펴보겠습니다. 다음과 같은 클래스가 있다고 가정해 봅시다:

javascriptclass User {
  #name;
  
  constructor(name) {
    this.#name = name;
  }
  getName() {
    return this.#name;
  }
}

이 클래스의 객체를 생성해 봅시다:

javascriptlet user = new User('john');

메서드 코드를 변수에 저장해 봅시다:

javascriptlet func = user.getName;

메서드를 변수에 저장하는 순간 컨텍스트가 손실되었습니다. 이제 메서드 코드 내부의 this는 더 이상 클래스 객체를 가리키지 않습니다. 함수를 호출하여 확인해 봅시다:

javascriptconsole.log(func()); // 오류

이 문제를 해결하기 위해 함수에 컨텍스트를 바인딩할 수 있습니다, 예를 들어 bind를 통해:

javascriptfunc = func.bind(user);
console.log(func()); // 작동