자바스크립트의 Arrow Function과 Lexical Scope 이해하기
F-Lab : 상위 1% 개발자들의 멘토링
AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!

Arrow Function 소개
자바스크립트 ES6에서 도입된 Arrow Function(화살표 함수)은 함수를 보다 간결하게 표현할 수 있는 문법입니다. 왜냐하면 화살표 함수는 function 키워드 없이 함수를 정의할 수 있기 때문입니다.
화살표 함수는 익명 함수로만 사용될 수 있으며, 변수에 할당하거나 다른 함수의 인자로 전달될 수 있습니다. 이는 코드의 가독성을 향상시키고, 함수 표현을 더욱 간결하게 만듭니다.
화살표 함수의 기본 문법은 다음과 같습니다.
const functionName = (parameters) => { // 함수 본문 };이와 같이 화살표(=>)를 사용하여 함수의 매개변수와 본문을 연결합니다.
화살표 함수는 단일 표현식을 반환하는 경우, 중괄호({})와 return 키워드를 생략할 수 있습니다. 이는 함수의 간결성을 더욱 높여줍니다.
화살표 함수의 사용 예제는 다음과 같습니다.
const add = (a, b) => a + b; console.log(add(2, 3)); // 5이 예제에서 add 함수는 두 매개변수의 합을 반환합니다.
Lexical Scope와 Arrow Function
Lexical Scope(어휘적 범위)는 함수가 정의된 시점의 변수 범위를 기준으로 변수를 참조하는 방식입니다. 왜냐하면 자바스크립트는 함수를 어디서 호출했는지가 아니라 어디에 정의했는지에 따라 변수의 범위를 결정하기 때문입니다.
화살표 함수는 Lexical Scope를 따르며, 이는 화살표 함수 내부에서 this 키워드를 사용할 때 중요한 특징으로 나타납니다. 화살표 함수에서의 this는 상위 스코프의 this를 그대로 상속받습니다.
이는 화살표 함수가 자신이 포함된 외부 함수의 this 값을 사용한다는 것을 의미합니다. 따라서 화살표 함수는 메서드 함수나 생성자 함수로는 적합하지 않습니다.
화살표 함수와 Lexical Scope의 관계를 보여주는 예제는 다음과 같습니다.
function Person() { this.age = 0; setInterval(() => { this.age++; // 여기서의 this는 Person 객체를 가리킴 }, 1000); } const p = new Person();이 예제에서 setInterval 내부의 화살표 함수는 Person 함수의 this 값을 상속받아 age 속성에 접근합니다.
Arrow Function의 제한사항
화살표 함수는 유용하지만 몇 가지 제한사항이 있습니다. 첫째, 화살표 함수는 자신만의 this, arguments, super, new.target을 가지지 않습니다. 이는 화살표 함수가 주변의 컨텍스트를 상속받기 때문입니다.
둘째, 화살표 함수는 생성자 함수로 사용될 수 없습니다. 왜냐하면 화살표 함수는 prototype 속성이 없으며, new 키워드와 함께 호출할 수 없기 때문입니다.
셋째, 화살표 함수는 메서드 함수로 사용될 때 주의가 필요합니다. 객체의 메서드로 화살표 함수를 사용하면, this가 예상과 다르게 작동할 수 있습니다.
이러한 제한사항에도 불구하고, 화살표 함수는 많은 경우에 유용하게 사용될 수 있습니다. 특히, 콜백 함수나 클로저를 다룰 때 화살표 함수의 간결성과 Lexical Scope의 특성이 장점으로 작용합니다.
결론
화살표 함수는 자바스크립트 ES6에서 도입된 강력한 기능 중 하나입니다. 코드의 간결성을 높이고, Lexical Scope를 활용하여 this 키워드의 사용을 단순화합니다.
화살표 함수의 이해는 현대 자바스크립트를 사용하는 개발자에게 필수적인 요소입니다. 왜냐하면 화살표 함수는 자바스크립트의 함수 표현을 더욱 풍부하게 만들고, 다양한 상황에서의 코드 작성을 용이하게 하기 때문입니다.
이 글을 통해 화살표 함수와 Lexical Scope의 개념을 이해하고, 자바스크립트 코드 작성에 있어 더욱 효율적인 방법을 선택할 수 있기를 바랍니다.
이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.