본문 바로가기
프로그래밍/자바스크립트

프로그래밍 「 자바스크립트 편」JavaScript에서 "this" 이해하기

by grapedoukan 2023. 6. 16.
728x90

자바스크립트의 세계에서 "this"라는 키워드는 혼란과 힘의 원천입니다. 함수가 실행되는 컨텍스트를 결정하는 데 중요한 역할을 합니다. 그러나 역동적인 특성으로 인해 동작을 완전히 파악하는 것이 어려울 수 있습니다. 이 기사에서는 JavaScript에서 "this"의 개념을 살펴보고 그 복잡성을 풀 것입니다.

기본적으로 "this"는 현재 실행 중인 함수를 소유하거나 호출하는 개체를 나타냅니다. 이를 통해 함수는 해당 개체의 속성과 메서드에 액세스하고 조작할 수 있습니다. "this"의 값은 런타임에 결정되며 함수가 호출되는 방식에 따라 달라집니다.

"this"가 일반적으로 사용되는 다양한 시나리오를 살펴보겠습니다.

  1. 전역 범위: "this"가 함수나 개체 외부에서 사용되는 경우 전역 개체를 나타냅니다. 브라우저 환경에서는 "window" 개체입니다. 예를 들어:
console.log(this); // Output: WindowFunction Invocation: When a function is called as a standalone function, without any object reference, “this” still refers to the global object.

2. 함수 호출: 함수가 객체 참조 없이 독립형 함수로 호출될 때 "this"는 여전히 전역 객체를 나타냅니다.

function greet() {
  console.log(this);
}

greet(); // Output: Window

3. 메서드 호출: 함수가 객체의 메서드로 호출될 때 "this"는 객체 자체를 나타냅니다. 이렇게 하면 개체의 속성과 메서드에 액세스할 수 있습니다.

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

person.greet(); // Output: Hello, John!

4. 생성자 호출: JavaScript에서는 "new" 키워드와 함께 생성자 함수를 사용하여 객체를 생성할 수 있습니다. 생성자 함수 내에서 "this"는 새로 생성된 개체를 나타냅니다.

function Car(make, model) {
  this.make = make;
  this.model = model;
}

const myCar = new Car("Toyota", "Camry");
console.log(myCar); // Output: Car { make: "Toyota", model: "Camry" }

5. 이벤트 핸들러: 함수가 이벤트 핸들러로 사용될 때 "this"는 일반적으로 이벤트를 트리거한 요소를 나타냅니다.

const button = document.querySelector("button");
button.addEventListener("click", function() {
  console.log(this); // Output: <button>Click Me</button>
});

6. 화살표 기능: 화살표 기능은 "this"와 관련하여 다르게 동작합니다. 그들은 바깥쪽 범위에서 "this" 값을 채택합니다. 즉, 화살표 함수 내의 "this"는 어휘적으로 바인딩됩니다.

const person = {
  name: "Alice",
  sayHello: function() {
    setTimeout(() => {
      console.log("Hello, " + this.name + "!");
    }, 1000);
  }
};

person.sayHello(); // Output: Hello, Alice!

"this"의 동작을 이해하는 것은 효과적이고 유지 관리 가능한 JavaScript 코드를 작성하는 데 중요합니다. 이를 통해 함수는 적절한 컨텍스트 내에서 작동할 수 있으며 개체 지향 프로그래밍 원칙을 통해 코드를 재사용할 수 있습니다.

"this"의 값은 함수가 정의되는 방법 또는 위치에 따라 결정되는 것이 아니라 호출되는 방법에 따라 결정됩니다. JavaScript 코드에서 "this"를 올바르게 이해하고 활용하려면 호출 컨텍스트에 주의를 기울이는 것이 중요합니다.

결론적으로 JavaScript의 "this"는 실행 중인 함수를 소유하거나 호출하는 객체를 가리키는 동적 키워드입니다. 개체 속성에 대한 액세스를 용이하게 하고, 개체 지향 프로그래밍을 가능하게 하며, 함수의 실행 컨텍스트를 결정합니다. "이것"의 개념을 마스터하면 JavaScript의 잠재력을 최대한 발휘하고 보다 강력하고 유연한 코드를 작성할 수 있습니다.

728x90