자바스크립트 this 키워드 이해하기

자바스크립트에서 this 키워드는 매우 중요한 개념입니다. 많은 개발자들이 이 키워드의 작동 방식을 이해하지 못해서 버그를 일으키기도 합니다. 이 글에서는 this 키워드의 개념과 작동 방식을 자세히 살펴보고 예제 코드를 통해 이해해보겠습니다.

this 키워드란?

자바스크립트에서 this 키워드는 현재 실행 중인 함수나 메소드가 속한 객체를 참조하는 데 사용됩니다. 다른 프로그래밍 언어의 this와 비슷한 개념이지만 동작 방식이 조금 다릅니다.

this 키워드의 동작 방식

this 키워드의 동작 방식은 다음과 같습니다:

예를 들어보겠습니다.

const myObject = {
  name: "John",
  sayHello: function() {
    console.log("Hello, " + this.name + "!");
  }
};

myObject.sayHello(); // 출력: "Hello, John!"

위 예제에서 sayHello 메소드를 호출할 때 thismyObject 객체를 참조합니다. 따라서 this.namemyObject 객체의 name 속성인 “John”을 참조하게 됩니다.

하지만 주의해야 할 점이 몇 가지 있습니다. 예를 들어, 콜백 함수 내부에서 this를 사용하면 예상과 달리 다른 결과를 얻을 수 있습니다.

const myObject = {
  name: "John",
  friends: ["Alice", "Bob", "Charlie"],
  listFriends: function() {
    this.friends.forEach(function(friend) {
      console.log(this.name + " is friends with " + friend);
    });
  }
};

myObject.listFriends();

위 예제에서 forEach 메소드의 콜백 함수 내부에서 this를 사용하여 name 속성을 참조하려 합니다. 하지만 내부 함수에서의 this는 전역 객체를 참조하기 때문에 this.nameundefined가 됩니다.

이런 문제를 해결하기 위해 bind, call, apply 등의 메소드를 사용하여 this를 바인딩할 수 있습니다.

const myObject = {
  name: "John",
  friends: ["Alice", "Bob", "Charlie"],
  listFriends: function() {
    this.friends.forEach(function(friend) {
      console.log(this.name + " is friends with " + friend);
    }.bind(this));
  }
};

myObject.listFriends();

위 예제에서 bind(this)를 사용하여 내부 함수의 thismyObject로 바인딩합니다.

결론

this 키워드는 자바스크립트에서 매우 중요한 개념입니다. 올바르게 사용하지 않으면 버그를 일으킬 수도 있습니다. 이 글을 통해 this 키워드의 개념과 동작 방식을 이해하고, 적절하게 활용할 수 있도록 연습해보세요.