this 키워드


this는 함수 실행시 호출(invocation) 방법에 의해 결정되는 특별한 객체입니다. 함수 실행시 결정되므로, 실행되는 맥락(execution context)에 따라 this는 다르게 결정됩니다.

함수 실행의 다섯가지 방법

함수가 무엇이냐가 중요한 것이 아니라, 어떻게 실행되는 것인지가 중요합니다. 함수 실행의 다섯가지 방법을 소개합니다.

  1. Global: 정확히 말하면 함수 실행은 아니고, 전역에서 this를 참조할 때를 의미합니다.

    console.log(this)
    
  2. Function 호출

    foo()
    
  3. Method 호출

    obj.foo()
    
  4. new 키워드를 이용한 생성자 호출

    new Foo()
    
  5. .call 또는 .apply 호출

    foo.call()
    foo.apply()
    

함수 실행에 따른 this 바인딩 패턴

이 함수 실행의 다섯가지 방법에 따라 this 역시 다섯가지 바인딩 패턴이 존재합니다. 그 중 아래 세가지 형태는 반드시 기억해야 합니다.

1번 Global 형태의 사용이나, 2번의 Function 호출 방법을 통해 함수를 실행할 경우에는, 애초에 this를 사용하지 않는 것을 권장합니다. Function 호출시 this를 사용할 이유는 없습니다. 흔히 사용하지 않는 방법입니다. 1,2번 방법의 함수 호출시, 다음과 같이 경우에 따라 바인딩이 다양하게 달라집니다. 아래 내용은 굳이 기억할 필요는 없습니다. 애초에 사용하지 않으면 됩니다.

Method 호출

메소드 호출은 객체.메소드() 과 같이 객체 내에 메소드를 호출하는 방법을 의미합니다.

단순 객체를 사용한 Singleton 패턴에서 이러한 예제를 흔히 볼 수 있습니다. 다음은 카운터를 구현한 예제입니다.