:ledger: 함수 선언식, 표현식, 화살표 함수 비교

JavaScript에서 함수는 핵심적인 역할을 한다. 이를 선언하고 사용하는 방식은 크게 함수 선언식, 함수 표현식, 그리고 화살표 함수로 나눌 수 있으며, 각 방식은 작성 방법과 동작 방식에서 차이가 있으므로 적절히 사용하는 것이 중요하다

:one: 함수 선언식 (Function Declaration)

함수 선언식은 function 키워드를 사용하여 독립적인 형태로 함수를 정의하는 방식이다.

  • 호이스팅: 함수 선언식으로 정의된 함수는 스코프의 맨 위로 끌어올려져 호출 시점보다 선언 시점이 뒤에 있어도 호출이 가능함.
  • 가독성: 함수 이름이 명확하게 드러나므로 코드의 의도를 쉽게 파악할 수 있음.
// 문법
function 함수이름(매개변수1, 매개변수2) {
  // 함수 본문
  return ;
}

:pushpin: 1-1) 사용 시점

  • 함수가 코드 내에서 독립적이고 반복적으로 사용될 때.
  • 함수가 상단에 선언되더라도 호출되는 시점에 문제가 없을 때.

:two: 함수 표현식 (Function Expression)

함수 표현식은 변수에 익명 함수 또는 이름을 가진 함수를 할당하는 방식이다.

  • 호이스팅: 함수 표현식은 선언 전에 호출할 수 없다. 이는 함수가 변수에 할당되기 전까지 사용할 수 없기 때문
  • 익명 함수: 일반적으로 이름이 없는 함수(익명 함수)를 사용하지만, 필요에 따라 이름을 명시할 수도 있다.
// 문법
const 변수이름 = function (매개변수1, 매개변수2) {
  // 함수 본문
  return ;
};

:pushpin: 2-1) 사용 시점

  • 함수가 특정 변수에 저장되거나, 다른 함수의 인자로 전달될 때.
  • 함수 선언 순서와 호출 순서를 엄격히 관리해야 할 때.

:three: 화살표 함수 (Arrow Function)

화살표 함수는 ES6에서 도입된 간결한 함수 작성 방식이다.

  • this 바인딩 없음: 화살표 함수는 자신만의 this를 가지지 않고, 선언된 위치의 this를 상속받는다. 따라서 객체 메서드로 사용하기에는 적합하지 않음
  • 간결한 문법: 본문이 한 줄이면 {}와 return 키워드를 생략할 수 있다.
  • 익명 함수: 항상 이름이 없는 함수로 사용된다.
// 문법
const 변수이름 = (매개변수1, 매개변수2) => {
  // 함수 본문
  return ;
};

:pushpin: 3-1) 사용 시점

  • 콜백 함수나 간결한 연산을 수행하는 함수에 적합.
  • this를 상속받아야 하는 경우.

:four: 세 가지 방식의 비교

특징 함수 선언식 함수 표현식 화살표 함수
호이스팅 지원됨 지원되지 않음 지원되지 않음
this 바인딩 고유 바인딩 고유 바인딩 상위 스코프 상속
문법 간결성 일반적 일반적 매우 간결
사용 시점 독립적인 함수 변수에 할당된 함수 콜백, 간단한 함수

:fire: 회고

일반적으로 함수를 선언해야 한다면 함수가 선언되기 이전에도 함수를 활용할 수 있기 때문에, 함수 선언문 방식을 따르는 게 좋다. 함수 선언 방식은 코드를 유연하게 구성할 수 있도록 해주고, 가독성도 좋기 때문이다.

  • 함수 선언식: 호이스팅이 필요하고 독립적인 역할을 하는 함수에 적합하다.
  • 함수 표현식: 변수와 결합하거나 동적으로 함수를 정의할 때 사용한다.
  • 화살표 함수: 콜백 함수나 간결한 함수 작성에 유용하며, this를 상속받아야 하는 경우 사용한다.
  • 가독성이 중요한 경우: 함수 선언식
  • 동적으로 함수를 정의해야 하는 경우: 함수 표현식
  • 간단한 로직이나 콜백: 화살표 함수

:pushpin: 참고 문서

태그:

카테고리: ,

업데이트: