JavaScript 즉시실행함수(IIFE) 완벽 가이드: 주니어 개발자를 위한 상세 설명

MicaelKnife·2024년 8월 9일

JavaScript

목록 보기
5/19
post-thumbnail

들어가며: 왜 즉시실행함수를 알아야 할까요?

안녕하세요, 열정 가득한 주니어 개발자 여러분! 오늘은 JavaScript의 숨은 보석 같은 기능, 바로 '즉시실행함수(IIFE: Immediately Invoked Function Expression)'에 대해 알아보려고 합니다.

"잠깐만요, 또 하나의 복잡한 개념인가요?" 라고 생각하실 수 있겠지만, 걱정 마세요! 즉시실행함수는 여러분의 코드를 더 깔끔하고, 안전하고, 효율적으로 만들어주는 강력한 도구입니다. 이 글을 다 읽고 나면, 여러분은 "와, 이걸 왜 진작 몰랐을까!" 하고 감탄하실 거예요.

그럼 지금부터, 즉시실행함수의 세계로 빠져볼까요?

1. 즉시실행함수란 무엇인가?

즉시실행함수(IIFE)는 정의되자마자 즉시 실행되는 JavaScript 함수입니다. 일반적인 함수는 정의한 후 나중에 호출해야 하지만, IIFE는 선언과 동시에 실행됩니다.

1.1 일반 함수를 사용한 IIFE

일반 함수를 사용한 IIFE의 기본 구조는 다음과 같습니다:

(function() {
    // 함수 내용
})();

또는 이렇게 작성할 수도 있습니다:

(function() {
    // 함수 내용
}());

1.2 화살표 함수를 사용한 IIFE

화살표 함수를 사용한 IIFE의 기본 구조는 다음과 같습니다:

(() => {
    // 함수 내용
})();

화살표 함수를 사용한 IIFE는 다양한 방식으로 작성될 수 있습니다:

  1. 기본 형태:

    (() => {
        // 함수 내용
    })();
  2. 매개변수가 있는 경우:

    ((x, y) => {
        console.log(x + y);
    })(10, 20);
  3. 단일 표현식인 경우 (중괄호와 return 생략):

    ((x, y) => x + y)(10, 20);
  4. 비동기 IIFE (async/await 사용):

    (async () => {
        const result = await someAsyncFunction();
        console.log(result);
    })();
  5. 객체 리터럴을 즉시 반환하는 경우:

    (() => ({
        name: "IIFE",
        value: 42
    }))();

이러한 다양한 형태를 통해 화살표 함수 IIFE는 간결하고 유연한 코드 작성을 가능하게 합니다.

2. 왜 즉시실행함수를 사용할까?

  1. 변수 스코프 제한: 전역 스코프의 오염을 방지합니다.
  2. 비공개 데이터: 외부에서 접근할 수 없는 private한 변수와 메서드를 만들 수 있습니다.
  3. 모듈화: 독립적인 기능 단위를 만들 수 있습니다.
  4. 초기화 코드: 애플리케이션 시작 시 한 번만 실행되어야 하는 코드를 관리할 수 있습니다.

3. 일반 함수 vs 화살표 함수로 작성된 IIFE: 주요 차이점과 예시

3.1 this 바인딩

일반 함수와 화살표 함수의 가장 큰 차이점은 this 바인딩입니다.

일반 함수 IIFE

const obj = {
    name: "IIFE 예제",
    regularIIFE: (function() {
        console.log("일반 함수 IIFE의 this:", this);
        return function() {
            console.log("일반 함수 IIFE에서 반환된 함수의 this:", this);
        };
    })()
};

obj.regularIIFE();

화살표 함수 IIFE

const obj = {
    name: "IIFE 예제",
    arrowIIFE: (() => {
        console.log("화살표 함수 IIFE의 this:", this);
        return () => {
            console.log("화살표 함수 IIFE에서 반환된 함수의 this:", this);
        };
    })()
};

obj.arrowIIFE();

실행 결과 비교:

  • 일반 함수 IIFE: this는 전역 객체(브라우저에서는 window)를 가리킵니다.
  • 화살표 함수 IIFE: this는 IIFE가 정의된 스코프의 this를 가리킵니다.

3.2 arguments 객체

arguments 객체의 사용 가능 여부도 중요한 차이점입니다.

일반 함수 IIFE에서의 arguments

(function() {
    console.log("일반 함수 IIFE의 arguments:", arguments);
})(1, 2, 3);

화살표 함수 IIFE에서의 arguments

(() => {
    console.log("화살표 함수 IIFE의 arguments:", arguments);
    // ReferenceError: arguments is not defined
})(1, 2, 3);

차이점:

  • 일반 함수 IIFE: arguments 객체를 사용할 수 있습니다.
  • 화살표 함수 IIFE: arguments 객체가 없습니다. 대신 rest 파라미터를 사용할 수 있습니다.

3.3 생성자 함수로서의 사용

IIFE를 생성자 함수로 사용하려는 경우에도 차이가 있습니다.

일반 함수 IIFE

const Constructor = (function() {
    function ConstructorFunc(name) {
        this.name = name;
    }
    return ConstructorFunc;
})();

const instance = new Constructor("IIFE 예제");
console.log(instance.name); // "IIFE 예제"

화살표 함수 IIFE

const Constructor = (() => {
    return (name) => {
        this.name = name;
    };
})();

try {
    const instance = new Constructor("IIFE 예제");
} catch (error) {
    console.error("에러 발생:", error);
    // TypeError: Constructor is not a constructor
}

차이점:

  • 일반 함수 IIFE: 생성자 함수로 사용 가능합니다.
  • 화살표 함수 IIFE: 생성자 함수로 사용할 수 없습니다.

4. IIFE 사용 시 주의사항

  1. 세미콜론 누락: IIFE 앞에 세미콜론을 붙이지 않으면 예기치 않은 오류가 발생할 수 있습니다.
  2. 과도한 사용: 모든 것을 IIFE로 감싸는 것은 코드 가독성을 떨어뜨릴 수 있습니다.
  3. 디버깅의 어려움: IIFE 내부의 코드는 디버깅이 상대적으로 어려울 수 있습니다.

마치며

즉시실행함수(IIFE)는 JavaScript에서 강력하고 유용한 패턴입니다. 이 글에서 우리는 IIFE의 기본 구조와 일반 함수, 화살표 함수로 작성된 IIFE의 주요 차이점을 살펴보았습니다.

  1. 기본 구조의 다양성
  2. this 바인딩의 차이
  3. arguments 객체 사용 가능 여부
  4. 생성자 함수로의 사용 가능 여부

이러한 차이점을 이해하고 적절히 활용한다면, 더 효과적이고 안전한 코드를 작성할 수 있을 것입니다.

코딩의 세계는 끝이 없습니다. 계속해서 학습하고, 실험하고, 성장하세요. 여러분의 코딩 여정에 IIFE가 유용한 도구가 되기를 바랍니다!

해피 코딩!

profile
천천히, 페이스 유지하는 개발자

0개의 댓글