Javascript & Node.js 패턴: IIFE의 이해와 활용
JavaScript & Node.js 패턴: IIFE의 이해와 활용
JavaScript에서 즉시 실행 함수 표현식(IIFE, Immediately Invoked Function Expression)는 오래전부터 자주 사용된 패턴입니다. Node.js와 같은 서버 환경에서도 비동기 초기화와 모듈화 등 다양한 작업에 활용할 수 있습니다. 이번 글에서는 IIFE의 구조, 사용 이유, 장점, 그리고 실제 사용 사례를 다룹니다.
IIFE란?
IIFE는 함수를 정의하자마자 실행하는 패턴입니다. 일반적인 함수 선언과 달리, 함수 표현식을 소괄호 ()
로 감싸고 뒤에 호출 연산자 ()
를 붙여 실행합니다.
// 일반적인 함수 선언
function normalFunction() {
console.log('Hello from normal function!');
}
normalFunction();
// IIFE
(() => {
console.log('Hello from IIFE!');
})();
IIFE의 주요 특징
즉시 실행
함수가 선언되면 바로 실행됩니다. 별도의 호출이 필요하지 않기 때문에 초기화 작업에 적합합니다.스코프 캡슐화
내부에서 선언된 변수는 외부에서 접근할 수 없습니다. 이를 통해 전역 네임스페이스 오염을 방지할 수 있습니다.모듈화 가능
함수 내부에 캡슐화된 코드를 반환함으로써 모듈 패턴으로 활용할 수 있습니다.
IIFE의 구조
IIFE는 두 가지 형태로 작성할 수 있습니다.
익명 함수 사용
소괄호로 감싸 익명 함수를 실행합니다.(function () { console.log('IIFE with an anonymous function'); })();
화살표 함수 사용
ES6 이후, 화살표 함수를 사용하여 간결하게 표현할 수 있습니다.(() => { console.log('IIFE with an arrow function'); })();
Node.js에서의 IIFE 활용
비동기 초기화 로직
Node.js 애플리케이션 초기화 시, 데이터베이스 연결이나 환경 설정 등 비동기 작업이 필요합니다. IIFE는 이러한 초기화 로직을 간결하게 처리하는 데 유용합니다.
(async () => {
try {
console.log('Connecting to the database...');
await connectToDatabase();
console.log('Database connected!');
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
} catch (error) {
console.error('Failed to initialize the server:', error);
process.exit(1); // 초기화 실패 시 프로세스 종료
}
})();
async/await
사용: 비동기 작업의 실행 흐름을 명확히 합니다.try-catch
블록: 초기화 단계에서 발생하는 오류를 쉽게 처리할 수 있습니다.- 즉시 실행: 선언 후 바로 실행되므로 초기화 코드가 독립적으로 작동합니다.
스코프 캡슐화
Node.js 모듈 파일 내에서 IIFE를 사용하면 불필요한 전역 변수 선언을 방지할 수 있습니다.
(() => {
const SECRET_KEY = process.env.SECRET_KEY;
function getSecret() {
return SECRET_KEY;
}
console.log('Module initialized with secret key.');
})();
- 장점: 내부 변수나 함수는 외부에서 접근할 수 없습니다.
- 응용: 민감한 데이터나 설정 정보를 안전하게 처리할 수 있습니다.
IIFE와 모듈 패턴
IIFE는 단순히 초기화 코드뿐 아니라 모듈 패턴으로도 자주 활용됩니다. 이를 통해 캡슐화된 코드를 반환하고, 외부에서 필요한 부분만 노출할 수 있습니다.
const CounterModule = (() => {
let count = 0; // 캡슐화된 변수
return {
increment() {
count++;
console.log(`Count: ${count}`);
},
decrement() {
count--;
console.log(`Count: ${count}`);
},
};
})();
CounterModule.increment(); // Count: 1
CounterModule.decrement(); // Count: 0
console.log(CounterModule.count); // undefined (외부 접근 불가)
언제 IIFE를 사용할까?
비동기 초기화 작업
- 데이터베이스 연결
- 외부 API 호출
- 서버 설정 초기화
전역 변수 오염 방지
- 라이브러리 코드 작성 시 전역 네임스페이스 보호
빠른 실행이 필요한 경우
- 이벤트 리스너 설정
- 즉시 실행되어야 하는 설정 코드
모듈화
- 캡슐화된 코드를 통해 코드 구조를 단순화
결론
IIFE는 JavaScript와 Node.js에서 단순하지만 강력한 패턴입니다. 특히 초기화 작업과 모듈화에서 유용하며, 비동기 코드와 결합하면 더욱 강력한 도구가 됩니다. 프로젝트에서 IIFE를 적극 활용하여 깔끔하고 유지보수하기 쉬운 코드를 작성해보세요!
'개발' 카테고리의 다른 글
LangChain의 모든 것: 체인과 에이전트로 확장하는 AI 기술 (2) | 2024.12.11 |
---|---|
JavaScript `document.querySelector()` 메서드, 그리고 CSS Selector의 이해 (0) | 2024.12.11 |
React와 Node.js 개발자를 위한 파일 네이밍의 모든 것 (0) | 2024.12.05 |
docker compose v2 for Redis (0) | 2024.12.05 |