자바스크립트에서 함수를 선언하는 방식은 크게 두 가지가 있습니다: 함수 선언문(function name() {}
)과 화살표 함수(const name = () => {}
). 이 두 방식은 문법과 개념적 차이로 인해 사용하는 상황이 다릅니다. 이 글에서는 각각의 선언 방식, 차이점, 주로 사용하기 좋은 상황을 살펴보겠습니다.
1. 함수 선언문 (function name()
)
function
키워드를 사용한 함수 선언 방식은 전통적인 자바스크립트 함수 정의 방식입니다. 이 방식은 함수의 이름을 선언하고, 해당 함수를 호출할 수 있는 이름을 제공합니다.
특징
- 호이스팅(Hoisting): 함수 선언은 자바스크립트 엔진에 의해 코드의 맨 위로 끌어올려집니다. 따라서 함수 선언문은 함수 선언 위치에 상관없이 호출할 수 있습니다.
this
바인딩:function
함수는 호출하는 방식에 따라this
가 동적으로 바뀝니다. 즉, 함수 내부에서this
가 호출된 컨텍스트를 가리킵니다.- 생성자 함수로 사용 가능:
function
함수는new
키워드를 통해 객체를 생성할 수 있는 생성자 함수로 사용할 수 있습니다.
예시
function calculateArea(radius) {
return Math.PI * radius * radius;
}
// 생성자 함수로 사용하는 경우
function Person(name, age) {
this.name = name;
this.age = age;
}
const person = new Person('Alice', 25);
주로 사용하기 좋은 상황
- 일반적인 함수 선언: 특정 기능을 수행하는 일반 함수로 정의할 때 유용합니다.
- 객체 메서드 정의: 객체 메서드에서
this
가 동적으로 바인딩될 필요가 있을 때 사용됩니다. - 생성자 함수:
new
키워드로 객체를 생성해야 하는 경우에 적합합니다.
2. 화살표 함수 (const name = () => {}
)
화살표 함수는 ES6에서 도입된 새로운 함수 선언 방식으로, 주로 간결한 표현과 상위 스코프의 this
를 유지하는 특징이 있습니다.
특징
- 호이스팅되지 않음: 화살표 함수는 변수 선언 규칙을 따르기 때문에, 함수가 정의되기 전에 호출할 수 없습니다.
- 렉시컬
this
바인딩: 화살표 함수는 정의된 위치의 상위 컨텍스트this
를 그대로 사용합니다. 즉,this
가 호출 방식에 따라 변경되지 않고 고정됩니다. - 생성자로 사용할 수 없음: 화살표 함수는
new
키워드를 사용할 수 없기 때문에 생성자 함수로 사용할 수 없습니다.
예시
// 콜백 함수로 사용하는 경우
const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
// 객체 메서드 내부의 콜백으로 사용하는 경우
const user = {
name: 'Alice',
tasks: ['task1', 'task2'],
showTasks() {
this.tasks.forEach(task => {
console.log(`${this.name} has ${task}`);
});
}
};
user.showTasks();
주로 사용하기 좋은 상황
- 콜백 함수: 상위 스코프의
this
가 필요한 콜백 함수나 이벤트 핸들러로 자주 사용됩니다. - 배열 메서드와 함께 사용:
map
,filter
,forEach
등 간단한 로직을 담은 콜백 함수로 사용하기 적합합니다. - 간결한 표현: 로직이 간단한 경우 화살표 함수로 한 줄 표현을 사용해 코드 가독성을 높일 수 있습니다.
차이점 요약
특성 | function name() |
const name = () => {} |
---|---|---|
호이스팅 | 호이스팅됨 | 호이스팅되지 않음 |
this 바인딩 |
동적 바인딩 | 상위 컨텍스트의 this 고정 |
생성자로 사용 가능 여부 | 가능 | 불가능 |
일반적인 용도 | 전통적인 함수 정의, 메서드 | 콜백, 이벤트 핸들러, 간결한 함수 표현 |
결론
함수 선언 방식과 화살표 함수는 각각 장단점과 적합한 상황이 다릅니다. function
키워드를 통한 함수 선언은 전통적인 함수로 정의할 때, 화살표 함수는 상위 this
를 그대로 유지하고 콜백 함수로 사용할 때 유용합니다. 상황에 맞는 함수를 선택하여 코드 가독성과 유지보수성을 높여보세요!
'Javascript & Typescript' 카테고리의 다른 글
JavaScript 모듈 시스템과 CommonJS, ESM 비교 (2) | 2024.09.13 |
---|---|
Node.js에서 비동기 코드를 사용해야 하는 이유 (0) | 2024.07.19 |
TypeScript 애플리케이션의 실행 방식 이해하기, 컴파일된 코드 vs TypeScript 직접 실행 (0) | 2024.07.05 |
TypeScript에서 type과 interface의 차이 및 사용법 (0) | 2024.06.14 |
import * as 와 import 의 차이점 (0) | 2024.06.14 |