Home

(자바스크립트) 함수 선언식 vs 함수 표현식 - 호이스팅의 모든 것 (코딩하는곰)

Published in javascript
May 21, 2025
2 min read
(자바스크립트) 함수 선언식 vs 함수 표현식 - 호이스팅의 모든 것 (코딩하는곰)

안녕하세요, 20년차 자바스크립트 개발자 코딩하는곰입니다. 오늘은 자바스크립트에서 가장 기본적이면서도 중요한 개념인 함수 선언식과 함수 표현식의 차이점, 특히 호이스팅과 관련된 내용을 깊이 있게 다루어보려고 합니다. 자바스크립트를 처음 배우는 분들이 가장 혼동하기 쉬운 부분이기도 한데요, 이 글을 통해 명확한 이해를 얻으시길 바랍니다.

1. 함수 선언식(Function Declaration)의 특징

함수 선언식은 가장 전통적인 함수 정의 방식으로, 다음과 같은 형태를 가집니다.

function sayHello() {
console.log('Hello, World!');
}

함수 선언식의 가장 큰 특징은 호이스팅(hoisting)이 발생한다는 점입니다. 호이스팅이란 변수나 함수의 선언이 코드의 최상단으로 끌어올려지는 자바스크립트의 독특한 동작 방식을 말합니다. 이로 인해 함수 선언식은 코드 내 어디에서든 호출이 가능합니다. 아래 예시를 보시죠.

// 함수 선언 전에 호출 가능
sayHello(); // 정상 작동 ("Hello, World!" 출력)
function sayHello() {
console.log('Hello, World!');
}

이러한 동작 방식은 편리해 보일 수 있지만, 코드의 흐름을 예측하기 어렵게 만들 수 있어 주의가 필요합니다. 특히 대규모 애플리케이션에서는 예상치 못한 버그를 발생시킬 수 있습니다.

(자바스크립트) 함수 선언식 vs 함수 표현식 - 호이스팅의 모든 것 (코딩하는곰)
(자바스크립트) 함수 선언식 vs 함수 표현식 - 호이스팅의 모든 것 (코딩하는곰)


💡 개발 프로젝트 아이디어가 필요하다면, (자바 예외 처리 완전 정복) try-catch-finally의 모든 것 (20년 경력자의 노하우)를 참고해보세요.

2. 함수 표현식(Function Expression)의 동작 방식

함수 표현식은 함수를 변수에 할당하는 방식으로 정의됩니다. 일반적으로 다음과 같은 형태를 가집니다.

const sayHello = function() {
console.log('Hello, World!');
};

함수 표현식의 가장 큰 특징은 호이스팅이 발생하지 않는다는 점입니다. 따라서 함수를 정의하기 전에 호출하면 에러가 발생합니다.

sayHello(); // TypeError: sayHello is not a function
const sayHello = function() {
console.log('Hello, World!');
};

이러한 특성 때문에 함수 표현식은 코드의 실행 순서를 더 명확하게 파악할 수 있어, 현대적인 자바스크립트 개발에서 선호되는 방식입니다. 특히 ES6의 화살표 함수(Arrow Function)와 함께 사용될 때 더욱 간결한 코드를 작성할 수 있습니다.

(자바스크립트) 함수 선언식 vs 함수 표현식 - 호이스팅의 모든 것 (코딩하는곰)
(자바스크립트) 함수 선언식 vs 함수 표현식 - 호이스팅의 모든 것 (코딩하는곰)


게임이나 SNS에서 쓸 닉네임이 고민된다면, 카테고리별로 추천해주는 닉네임 생성기를 활용해보세요.

3. 함수 선언식 vs 표현식 - 실무에서의 선택 가이드

그렇다면 실제 개발에서는 어떤 방식을 선택해야 할까요? 다음 기준을 참고하시면 좋습니다.

  1. 호이스팅 필요성: 전역에서 어디서나 호출해야 하는 유틸리티 함수라면 함수 선언식이 적합
  2. 코드 안정성: 실행 순서가 중요한 경우 함수 표현식이 더 안전
  3. 모듈 시스템: ES6 모듈을 사용하는 경우 대부분 함수 표현식이 권장됨
  4. 콜백 함수: 인라인 콜백 함수로 사용할 때는 함수 표현식이 더 적합 또한, 함수 표현식은 클로저와 함께 사용될 때 더 강력한 기능을 발휘합니다. 다음은 함수 표현식을 이용한 클로저 예제입니다.
function createCounter() {
let count = 0;
return function() {
count++;
console.log(count);
};
}
const counter = createCounter();
counter(); // 1
counter(); // 2

(자바스크립트) 함수 선언식 vs 함수 표현식 - 호이스팅의 모든 것 (코딩하는곰)
(자바스크립트) 함수 선언식 vs 함수 표현식 - 호이스팅의 모든 것 (코딩하는곰)


로또 번호를 더 스마트하게 선택하고 싶다면, AI 분석 기반 번호 추천 앱 지니로또AI를 활용해보는 것이 좋습니다.

오늘은 자바스크립트의 함수 선언식과 표현식의 차이점, 특히 호이스팅과 관련된 내용을 자세히 살펴보았습니다. 함수는 자바스크립트의 가장 핵심적인 개념이므로 이 차이를 정확히 이해하는 것이 중요합니다. 처음엔 혼란스러울 수 있지만, 실제 프로젝트에 적용해보시면 금방 익숙해질 거예요. 코딩하는곰의 자바스크립트 강좌는 계속 이어질 예정이니, 궁금한 점이 있으면 댓글로 남겨주세요. 다음 시간에는 더 유익한 주제로 찾아뵙겠습니다. 감사합니다!

📅 다양한 문화행사를 한눈에 보고 싶다면, 2025 전주세계소리축제를 참고해보세요.









최상의 건강을 위한 영양가득한 식품과 정보! life-plus.co.kr 바로가기
최상의 건강을 위한 영양가득한 식품과 정보! life-plus.co.kr 바로가기



다채로운 문화축제와 공연 소식을 공유하는 블로그! culturestage.co.kr 바로가기
다채로운 문화축제와 공연 소식을 공유하는 블로그! culturestage.co.kr 바로가기



비트코인 세계로의 첫걸음! 지금 가입하고 거래 수수료 할인 혜택 받으세요! bitget.com 바로가기
비트코인 세계로의 첫걸음! 지금 가입하고 거래 수수료 할인 혜택 받으세요! bitget.com 바로가기




Tags

#developer#coding#javascript

Share

Previous Article
(Vue.js vs Angular) RouterModule과 Route 배열 구성 완벽 가이드

Table Of Contents

1
1. 함수 선언식(Function Declaration)의 특징
2
2. 함수 표현식(Function Expression)의 동작 방식
3
3. 함수 선언식 vs 표현식 - 실무에서의 선택 가이드

Related Posts

(실전 프로젝트) localStorage를 활용한 나만의 메모장 웹 앱 만들기 - 데이터 저장부터 불러오기까지 완벽 구현
December 30, 2025
2 min