[mjt] 함수 선언식, 표현식, 화살표 함수 비교
함수 선언식, 표현식, 화살표 함수 비교
JavaScript에서 함수는 핵심적인 역할을 한다. 이를 선언하고 사용하는 방식은 크게 함수 선언식
, 함수 표현식
, 그리고 화살표 함수
로 나눌 수 있으며, 각 방식은 작성 방법과 동작 방식에서 차이가 있으므로 적절히 사용하는 것이 중요하다
함수 선언식 (Function Declaration)
함수 선언식은 function 키워드를 사용하여 독립적인 형태로 함수를 정의하는 방식이다.
- 호이스팅: 함수 선언식으로 정의된 함수는 스코프의 맨 위로 끌어올려져 호출 시점보다 선언 시점이 뒤에 있어도 호출이 가능함.
- 가독성: 함수 이름이 명확하게 드러나므로 코드의 의도를 쉽게 파악할 수 있음.
// 문법
function 함수이름(매개변수1, 매개변수2) {
// 함수 본문
return 값;
}
1-1) 사용 시점
- 함수가 코드 내에서 독립적이고 반복적으로 사용될 때.
- 함수가 상단에 선언되더라도 호출되는 시점에 문제가 없을 때.
함수 표현식 (Function Expression)
함수 표현식은 변수에 익명 함수 또는 이름을 가진 함수를 할당하는 방식이다.
- 호이스팅: 함수 표현식은 선언 전에 호출할 수 없다. 이는 함수가 변수에 할당되기 전까지 사용할 수 없기 때문
- 익명 함수: 일반적으로 이름이 없는 함수(익명 함수)를 사용하지만, 필요에 따라 이름을 명시할 수도 있다.
// 문법
const 변수이름 = function (매개변수1, 매개변수2) {
// 함수 본문
return 값;
};
2-1) 사용 시점
- 함수가 특정 변수에 저장되거나, 다른 함수의 인자로 전달될 때.
- 함수 선언 순서와 호출 순서를 엄격히 관리해야 할 때.
화살표 함수 (Arrow Function)
화살표 함수는 ES6에서 도입된 간결한 함수 작성 방식이다.
- this 바인딩 없음: 화살표 함수는 자신만의 this를 가지지 않고, 선언된 위치의 this를 상속받는다. 따라서 객체 메서드로 사용하기에는 적합하지 않음
- 간결한 문법: 본문이 한 줄이면 {}와 return 키워드를 생략할 수 있다.
- 익명 함수: 항상 이름이 없는 함수로 사용된다.
// 문법
const 변수이름 = (매개변수1, 매개변수2) => {
// 함수 본문
return 값;
};
3-1) 사용 시점
- 콜백 함수나 간결한 연산을 수행하는 함수에 적합.
- this를 상속받아야 하는 경우.
세 가지 방식의 비교
특징 | 함수 | 선언식 함수 | 표현식 화살표 함수 |
---|---|---|---|
호이스팅 | 지원됨 | 지원되지 않음 | 지원되지 않음 |
this 바인딩 | 고유 바인딩 | 고유 바인딩 | 상위 스코프 상속 |
문법 간결성 | 일반적 | 일반적 | 매우 간결 |
사용 시점 | 독립적인 함수 | 변수에 할당된 함수 | 콜백, 간단한 함수 |
회고
일반적으로 함수를 선언해야 한다면 함수가 선언되기 이전에도 함수를 활용할 수 있기 때문에, 함수 선언문 방식을 따르는 게 좋다. 함수 선언 방식은 코드를 유연하게 구성할 수 있도록 해주고, 가독성도 좋기 때문이다.
-
함수 선언식
: 호이스팅이 필요하고 독립적인 역할을 하는 함수에 적합하다. -
함수 표현식
: 변수와 결합하거나 동적으로 함수를 정의할 때 사용한다. -
화살표 함수
: 콜백 함수나 간결한 함수 작성에 유용하며, this를 상속받아야 하는 경우 사용한다. - 가독성이 중요한 경우:
함수 선언식
- 동적으로 함수를 정의해야 하는 경우:
함수 표현식
- 간단한 로직이나 콜백:
화살표 함수