안녕하세요, 20년차 자바스크립트 개발자 코딩하는곰입니다. 오늘은 자바스크립트에서 가장 기본적이면서도 중요한 개념인 함수 선언식과 함수 표현식의 차이점, 특히 호이스팅과 관련된 내용을 깊이 있게 다루어보려고 합니다. 자바스크립트를 처음 배우는 분들이 가장 혼동하기 쉬운 부분이기도 한데요, 이 글을 통해 명확한 이해를 얻으시길 바랍니다.
함수 선언식은 가장 전통적인 함수 정의 방식으로, 다음과 같은 형태를 가집니다.
function sayHello() {console.log('Hello, World!');}
함수 선언식의 가장 큰 특징은 호이스팅(hoisting)이 발생한다는 점입니다. 호이스팅이란 변수나 함수의 선언이 코드의 최상단으로 끌어올려지는 자바스크립트의 독특한 동작 방식을 말합니다. 이로 인해 함수 선언식은 코드 내 어디에서든 호출이 가능합니다. 아래 예시를 보시죠.
// 함수 선언 전에 호출 가능sayHello(); // 정상 작동 ("Hello, World!" 출력)function sayHello() {console.log('Hello, World!');}
이러한 동작 방식은 편리해 보일 수 있지만, 코드의 흐름을 예측하기 어렵게 만들 수 있어 주의가 필요합니다. 특히 대규모 애플리케이션에서는 예상치 못한 버그를 발생시킬 수 있습니다.
💡 개발 프로젝트 아이디어가 필요하다면, (자바 예외 처리 완전 정복) try-catch-finally의 모든 것 (20년 경력자의 노하우)를 참고해보세요.
함수 표현식은 함수를 변수에 할당하는 방식으로 정의됩니다. 일반적으로 다음과 같은 형태를 가집니다.
const sayHello = function() {console.log('Hello, World!');};
함수 표현식의 가장 큰 특징은 호이스팅이 발생하지 않는다는 점입니다. 따라서 함수를 정의하기 전에 호출하면 에러가 발생합니다.
sayHello(); // TypeError: sayHello is not a functionconst sayHello = function() {console.log('Hello, World!');};
이러한 특성 때문에 함수 표현식은 코드의 실행 순서를 더 명확하게 파악할 수 있어, 현대적인 자바스크립트 개발에서 선호되는 방식입니다. 특히 ES6의 화살표 함수(Arrow Function)와 함께 사용될 때 더욱 간결한 코드를 작성할 수 있습니다.
게임이나 SNS에서 쓸 닉네임이 고민된다면, 카테고리별로 추천해주는 닉네임 생성기를 활용해보세요.
그렇다면 실제 개발에서는 어떤 방식을 선택해야 할까요? 다음 기준을 참고하시면 좋습니다.
function createCounter() {let count = 0;return function() {count++;console.log(count);};}const counter = createCounter();counter(); // 1counter(); // 2
로또 번호를 더 스마트하게 선택하고 싶다면, AI 분석 기반 번호 추천 앱 지니로또AI를 활용해보는 것이 좋습니다.
오늘은 자바스크립트의 함수 선언식과 표현식의 차이점, 특히 호이스팅과 관련된 내용을 자세히 살펴보았습니다. 함수는 자바스크립트의 가장 핵심적인 개념이므로 이 차이를 정확히 이해하는 것이 중요합니다. 처음엔 혼란스러울 수 있지만, 실제 프로젝트에 적용해보시면 금방 익숙해질 거예요. 코딩하는곰의 자바스크립트 강좌는 계속 이어질 예정이니, 궁금한 점이 있으면 댓글로 남겨주세요. 다음 시간에는 더 유익한 주제로 찾아뵙겠습니다. 감사합니다!
📅 다양한 문화행사를 한눈에 보고 싶다면, 2025 전주세계소리축제를 참고해보세요.
