F-Lab
🚀
상위권 IT회사 합격 이력서 무료로 모아보기

자바스크립트의 this 키워드 완전 정복

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!



this 키워드의 기본 개념

자바스크립트에서 this 키워드는 함수나 메서드가 호출되는 방식에 따라 그 값이 결정되는 동적인 특성을 가지고 있습니다. 이는 함수의 실행 컨텍스트에 따라 달라지며, 함수가 어떻게 호출되었는지에 따라 this의 값이 결정됩니다.

왜냐하면 this는 실행 시점에 결정되기 때문에, 선언 시점에서는 그 값을 알 수 없습니다. 이는 자바스크립트의 유연성을 제공하지만, 동시에 혼란을 야기할 수도 있습니다.

일반적으로, 전역 스코프에서 this는 전역 객체를 가리키고, 메서드로서 호출될 때는 해당 메서드를 호출한 객체를 가리킵니다. 하지만, 함수로서 호출될 때는 전역 객체를 가리키는 경우가 일반적입니다.

이러한 특성 때문에 this의 동작 방식을 정확히 이해하는 것은 자바스크립트 프로그래밍에서 매우 중요합니다.

아래 예시는 this가 어떻게 다르게 작동하는지 보여줍니다.

const person = {
    name: 'John',
    greet: function() { console.log('Hello, ' + this.name); }
};
person.greet(); // 'Hello, John'이 출력됩니다.

const greetFunction = person.greet;
greetFunction(); // 'Hello, '가 출력되고, this.name은 undefined입니다.


this의 다양한 사용 사례와 문제점

자바스크립트에서 this의 가장 큰 문제점 중 하나는 예측하지 못한 컨텍스트에서의 사용입니다. 특히, 콜백 함수나 이벤트 핸들러에서 this의 값이 달라질 수 있어 개발자를 혼란스럽게 합니다.

왜냐하면 콜백 함수나 이벤트 핸들러가 어떤 객체의 메서드로서 호출되지 않는 경우, this는 전역 객체나 undefined를 가리키게 되기 때문입니다. 이는 코드의 예측 가능성을 떨어뜨리고 버그를 유발할 수 있습니다.

또한, 클래스와 생성자 함수에서 this를 사용할 때도 주의가 필요합니다. 생성자 함수 내부에서 this는 새로 생성될 인스턴스를 가리키지만, 메서드가 아닌 일반 함수로서 호출될 경우 this의 값이 달라질 수 있습니다.

이러한 문제를 해결하기 위해 ES6에서는 화살표 함수를 도입했습니다. 화살표 함수는 자신을 포함하는 외부 스코프의 this를 가리키므로, this의 값이 변하지 않는 것을 보장합니다.

아래 코드는 화살표 함수를 사용하여 this 문제를 해결하는 예시입니다.

const person = {
    name: 'John',
    greet: function() { 
        setTimeout(() => {
            console.log('Hello, ' + this.name);
        }, 1000);
    }
};
person.greet(); // 1초 후 'Hello, John'이 출력됩니다.


this 바인딩의 명시적 방법

자바스크립트에서는 this 바인딩을 명시적으로 할당하는 방법도 제공합니다. call, apply, bind 메서드를 사용하면 함수 호출 시 this의 값을 명시적으로 지정할 수 있습니다.

왜냐하면 이 메서드들은 첫 번째 인자로 this에 바인딩할 객체를 받고, 이를 통해 함수의 실행 컨텍스트를 명시적으로 설정할 수 있기 때문입니다.

callapply는 함수를 즉시 호출하지만, bind는 함수를 호출하지 않고 this가 바인딩된 새로운 함수를 반환합니다.

이러한 방법을 통해 this의 값이 예기치 않게 변경되는 것을 방지하고, 코드의 가독성과 안정성을 높일 수 있습니다.

아래 예시는 call, apply, bind를 사용한 this 바인딩의 예시입니다.

function greet() {
    console.log('Hello, ' + this.name);
}

const person = { name: 'John' };
greet.call(person); // 'Hello, John'이 출력됩니다.
greet.apply(person); // 'Hello, John'이 출력됩니다.

const boundGreet = greet.bind(person);
boundGreet(); // 'Hello, John'이 출력됩니다.


this의 활용과 주의사항

this 키워드는 자바스크립트에서 매우 유용하게 사용될 수 있지만, 그 사용법을 정확히 이해하고 주의 깊게 사용해야 합니다. 특히, this의 값이 동적으로 변할 수 있다는 점을 항상 염두에 두어야 합니다.

왜냐하면 this의 잘못된 사용은 버그의 원인이 될 수 있으며, 코드의 가독성과 유지보수성을 저하시킬 수 있기 때문입니다.

따라서, this를 사용할 때는 그 컨텍스트를 명확히 이해하고, 필요한 경우 call, apply, bind 메서드나 화살표 함수를 적절히 활용하여 this의 값을 명확히 지정해야 합니다.

또한, this의 사용을 최소화하거나, 클래스와 객체의 메서드에서 주로 사용하는 것이 좋습니다. 이는 this의 복잡성을 줄이고, 코드의 안정성을 높이는 데 도움이 됩니다.

이러한 주의사항을 지키면서 this를 활용한다면, 보다 효율적이고 안정적인 자바스크립트 프로그래밍이 가능할 것입니다.



결론

자바스크립트의 this 키워드는 그 동적인 특성으로 인해 강력하면서도 복잡할 수 있습니다. 그러나 this의 작동 원리를 정확히 이해하고, 적절한 방법으로 사용한다면 코드의 유연성과 재사용성을 높일 수 있습니다.

개발자는 this의 사용에 있어서 주의를 기울이고, 명시적 바인딩, 화살표 함수 등을 활용하여 this의 예측 불가능성을 최소화해야 합니다.

이러한 노력을 통해 this를 효과적으로 활용하며, 자바스크립트의 다양한 환경에서 안정적인 애플리케이션을 개발할 수 있을 것입니다.

this 키워드에 대한 깊은 이해는 자바스크립트 개발자로서의 역량을 한층 더 향상시키는 데 중요한 역할을 할 것입니다.

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수
F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 1600-8776 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로63길 12, 438호 | copyright © F-Lab & Company 2025