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

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

writer_thumbnail

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

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



자바스크립트의 this 키워드 소개

자바스크립트에서 this 키워드는 함수나 메서드가 호출되는 방식에 따라 그 값이 결정되는 매우 중요하면서도 혼란스러운 개념입니다. 왜냐하면 this의 값은 함수가 어떻게 호출되었는지에 따라 동적으로 변하기 때문입니다.

일반적으로 this는 현재 실행 컨텍스트의 객체를 가리키며, 이는 전역 컨텍스트에서는 전역 객체를, 함수 내부에서는 함수를 호출한 객체를 의미합니다.

하지만 this의 동작 방식은 함수가 일반 함수로 호출되었는지, 메서드로 호출되었는지, 생성자 함수로 사용되었는지 등에 따라 달라집니다.

이러한 특성 때문에 this는 자바스크립트에서 가장 이해하기 어려운 개념 중 하나로 꼽힙니다.

이 글에서는 this의 다양한 사용 사례와 함께 그 동작 원리를 명확히 이해할 수 있도록 돕겠습니다.



기본적인 this의 동작 원리

자바스크립트에서 this의 가장 기본적인 동작 원리는 함수 호출 패턴에 따라 결정된다는 것입니다. 왜냐하면 this의 값은 함수가 호출되는 방식에 따라 달라지기 때문입니다.

예를 들어, 전역 범위에서 this를 사용하면, 이는 전역 객체를 가리킵니다. 브라우저 환경에서는 window, Node.js 환경에서는 global 객체가 됩니다.

함수가 객체의 메서드로 호출될 때, this는 그 메서드를 호출한 객체를 가리킵니다. 이는 메서드 내부에서 객체의 속성이나 다른 메서드에 접근할 수 있게 해줍니다.

하지만 일반 함수로서 호출될 때 this는 전역 객체를 가리키게 됩니다. 이는 함수 내부에서 this를 사용할 때 주의해야 하는 부분입니다.

또한, 생성자 함수에서 this는 새로 생성되는 객체를 가리킵니다. 이를 통해 생성자 함수 내부에서 새 객체의 속성을 정의할 수 있습니다.



화살표 함수에서의 this

ES6에서 도입된 화살표 함수는 this의 동작 방식에 있어 일반 함수와 다릅니다. 왜냐하면 화살표 함수에서 this는 자신을 포함하고 있는 외부 함수의 this 값을 상속받기 때문입니다.

이는 화살표 함수가 자신의 this를 가지지 않는다는 것을 의미합니다. 따라서 화살표 함수 내부에서 this를 사용하면, 그 값은 항상 외부 스코프의 this와 동일합니다.

이 특성 덕분에 화살표 함수는 메서드의 콜백 함수나 이벤트 핸들러 등에서 유용하게 사용됩니다. 왜냐하면 화살표 함수를 사용하면 this를 별도로 바인딩할 필요가 없기 때문입니다.

const obj = {
    value: 1,
    increase: function() {
        setInterval(() => {
            this.value++;
            console.log(this.value);
        }, 1000);
    }
};
obj.increase();

위 예제에서 setInterval 내부의 화살표 함수는 increase 메서드의 this를 상속받아 obj 객체의 value 속성에 접근할 수 있습니다.



this 바인딩의 명시적 변경

자바스크립트에서는 call, apply, bind 메서드를 사용하여 함수의 this 바인딩을 명시적으로 변경할 수 있습니다.

callapply 메서드는 함수를 즉시 호출하면서 첫 번째 인자로 전달된 객체를 this로 바인딩합니다. call은 나머지 인자를 개별적으로, apply는 배열로 받습니다.

bind 메서드는 함수의 this 값을 영구적으로 변경한 새로운 함수를 반환합니다. 이는 특정 객체에 함수를 '바인딩'하여 사용할 때 유용합니다.

function greet() {
    console.log(`Hello, ${this.name}`);
}
const user = { name: 'John' };
const boundGreet = greet.bind(user);
boundGreet(); // Hello, John

위 예제에서 bind 메서드를 사용하여 greet 함수의 thisuser 객체로 바인딩한 새로운 함수 boundGreet를 생성했습니다.



this의 사용 시 주의사항

this의 동작 방식을 정확히 이해하는 것은 중요하지만, 그 사용에 있어서는 주의가 필요합니다. 왜냐하면 this의 값이 예상과 다르게 바인딩될 수 있기 때문입니다.

특히, 콜백 함수나 이벤트 핸들러에서 this를 사용할 때, 그 값이 예상한 객체가 아닌 전역 객체나 undefined가 되는 경우가 종종 있습니다. 이러한 문제를 해결하기 위해 화살표 함수를 사용하거나 bind 메서드로 this를 명시적으로 바인딩하는 방법을 사용할 수 있습니다.

또한, 클래스 문법을 사용할 때 this는 인스턴스를 가리키게 되며, 메서드 내부에서 this를 사용하여 인스턴스의 속성이나 다른 메서드에 접근할 수 있습니다. 하지만 클래스 메서드를 콜백으로 전달할 때 this 바인딩을 잃어버리는 문제에 주의해야 합니다.

결론적으로, this는 자바스크립트에서 매우 강력한 기능을 제공하지만, 그 사용법을 정확히 이해하고 적절히 적용하는 것이 중요합니다.



결론

이 글을 통해 자바스크립트의 this 키워드에 대한 이해를 돕고자 했습니다. this는 자바스크립트의 핵심 개념 중 하나이며, 그 동작 원리를 이해하는 것은 중요합니다.

this의 동작 방식을 이해하고, 적절한 상황에서 화살표 함수나 bind, call, apply 메서드를 사용하여 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