0Pricing
JavaScript Academy · 강의

모듈 패턴(IIFE)

즉시 실행 함수를 사용하여 코드를 캡슐화합니다.

모듈 패턴(IIFE)은(는) CoddyKit의 무료 JavaScript Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 JavaScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. JavaScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

모듈 패턴이 해결하는 문제

ES 모듈이 등장하기 전에는 모듈 패턴을 사용해 관련 상태와 behavior를 하나로 묶고 내부 구현은 비공개로 유지하면서 깔끔한 공개 인터페이스를 제공할 수 있었습니다. 이 패턴은 클로저를 기반으로 합니다.

IIFE

IIFE(즉시 실행 함수 표현식)는 정의되는 순간 실행되는 함수입니다. 괄호로 감싼 뒤 호출하면 즉시 비공개 스코프가 만들어집니다.

const result = (function () {
  return 42;
})();
console.log(result); // 42

즉시 실행하는 이유

IIFE를 사용하면 이름이 지정된 함수를 남겨 두지 않고 한 번만 사용하는 비공개 스코프를 만들 수 있습니다. 내부의 모든 것은 전역 네임스페이스와 격리됩니다.

(function () {
  const temp = "not global";
  console.log(temp);
})();
// temp is unreachable out here

공개 인터페이스 반환하기

모듈 패턴은 객체를 반환하는 IIFE입니다. 객체의 메서드는 비공개 변수에 대한 클로저이며, 공개 인터페이스를 구성합니다.

const counter = (function () {
  let count = 0; // private
  return {
    inc: () => ++count,
    value: () => count
  };
})();
counter.inc();
console.log(counter.value()); // 1

비공개와 공개

내부에서 선언했지만 반환하지 않은 것은 모두 비공개로 유지됩니다. 반환된 객체에 넣은 것만 접근할 수 있습니다.

const calc = (function () {
  const pi = 3.14159; // private constant
  return {
    area: (r) => pi * r * r
  };
})();
console.log(calc.area(2)); // 12.56636
console.log(calc.pi);      // undefined

비공개 도우미 함수

도우미 함수는 모듈 내부에 둘 수 있으며, 공개 메서드가 사용하지만 외부에는 절대 노출하지 않을 수 있습니다.

const validator = (function () {
  const clean = (s) => s.trim().toLowerCase(); // private
  return {
    isEmail: (s) => clean(s).includes("@")
  };
})();
console.log(validator.isEmail(" A@B.com ")); // true

공개 모듈 패턴

널리 사용되는 변형에서는 모든 함수를 비공개로 정의한 다음, 공개 함수에 대한 참조를 “공개하는” 객체를 반환합니다. 이렇게 하면 공개 인터페이스 목록을 마지막 부분에서 명확하게 확인할 수 있습니다.

const store = (function () {
  let items = [];
  function add(x) { items.push(x); }
  function count() { return items.length; }
  return { add, count }; // reveal
})();
store.add("a");
console.log(store.count()); // 1

싱글턴

IIFE는 한 번만 실행되므로 모듈은 사실상 싱글턴입니다. 즉, 하나의 비공개 상태 집합을 가진 인스턴스가 정확히 하나만 존재합니다.

const config = (function () {
  let settings = { theme: "dark" };
  return {
    get: (k) => settings[k],
    set: (k, v) => { settings[k] = v; }
  };
})();
config.set("theme", "light");
console.log(config.get("theme")); // "light"

의존성 전달하기

전역 객체나 다른 모듈을 IIFE 인수로 전달할 수 있습니다. 이렇게 하면 의존성이 명시적으로 드러나고 안전한 축소화가 가능합니다.

const mathUtils = (function (M) {
  return { roundUp: (n) => M.ceil(n) };
})(Math);
console.log(mathUtils.roundUp(4.1)); // 5

전역 오염 피하기

핵심은 이름 없는 변수를 수십 개 만드는 대신 전역 이름 하나, 즉 모듈 하나만 사용하는 것입니다. 이를 통해 스크립트 사이의 이름 충돌을 방지할 수 있습니다.

ES 모듈과의 관계

오늘날에는 import/export가 언어 차원에서 진정한 모듈 스코프를 제공하므로 이 패턴을 대부분 대체합니다. 하지만 IIFE 모듈을 이해하면 정보 은닉과 캡슐화가 작동하는 방식을 명확히 파악할 수 있으며, 레거시 코드에서 여전히 이 패턴을 만나게 됩니다.

빠른 확인

모듈 패턴과 IIFE입니다.

복습

모듈 패턴은 IIFE를 사용해 비공개 스코프를 만들고, 숨겨진 상태에 대한 클로저인 메서드를 가진 객체를 반환합니다. 내부 구현은 비공개로 유지되고 반환된 멤버만 공개됩니다. 공개 모듈 패턴과 같은 변형은 인터페이스를 명확하게 하며, 모듈은 싱글턴으로 동작합니다. 이제 ES import/export가 이 패턴을 대체하지만, 같은 개념을 기반으로 합니다.

자주 묻는 질문

“모듈 패턴(IIFE)” 강의는 무료인가요?

네 — “모듈 패턴(IIFE)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 JavaScript Academy 강의 전체를 잠금 해제할 수 있습니다. JavaScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“모듈 패턴(IIFE)”에서 뭘 배우나요?

즉시 실행 함수를 사용하여 코드를 캡슐화합니다. 브라우저에서 직접 실행하는 실습 코드로 JavaScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

JavaScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 JavaScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“모듈 패턴(IIFE)” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 JavaScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 JavaScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 클로저가 상태를 캡처하는 방식
  2. 클로저로 비공개 변수 만들기
  3. 모듈 패턴(IIFE)
  4. 팩토리 함수
← JavaScript Academy(으)로 돌아가기