노출모듈 패턴(revealing module pattern)은 자바스크립트에서 변수나 함수가 의도치 않게 외부에서 바뀌거나 겹치는 것을 막기 위해, 마치 하나의 '캡슐'처럼 코드를 안전하게 포장하는 패턴입니다.
이 캡슐의 일부 내용물은 외부에서 볼 수 없도록 숨기고(private), 허락된 것들만 밖으로 내보여서 사용할 수 있게(public) 해줍니다.
💻 코드 예시
1. 자바스크립트(JavaScript)에서의 노출모듈 패턴
a와 b는 다른 모듈에서 사용할 수 있는 변수나 함수인 private 범위를 가집니다. c와 d는 다른 모듈에서 사용할 수 있는 변수나 함수이며 public 범위를 가집니다. 참고로 앞서 설명한 노출모듈 패턴을 기반으로 만든 자바스크립트 모듈 방식으로는 CJF(CommonJS) 모듈 방식이 있습니다.
const pukuba = (() => {
// --- Private 영역 (내부에서만 사용 가능) ---
const a = 1; // 외부에서 접근 불가
const b = () => 2; // 외부에서 호출 불가
// --- Public으로 노출할 것들을 담는 객체 ---
const public = {
c: 2,
d: () => 3,
};
// --- "이것들만 밖에서 쓰세요" 하고 허락하는 과정 ---
return public;
})(); // 함수를 만들자마자 즉시 실행!
console.log(pukuba); // { c: 2, d: [Function: d] }
console.log(pukuba.a); // undefined (a는 private이라 보이지 않음)
console.log(pukuba.c); // 2 (public이라 접근 가능)
용어 설명:
- public:
- 클래스에 정의된 함수에서 접근 가능하며 자식 클래스와 외부 클래스에서 접근 가능한 범위
- protected:
- 클래스에 정의된 함수에서 접근 가능, 자식 클래스에서 접근 가능하지만 외부 클래스에서 접근 불가능한 범위
- private:
- 클래스에 정의된 함수에서 접근 가능하지만 자식 클래스와 외부 클래스에서 접근 불가능한 범위
- 즉시 실행 함수(IIFE)
함수를 정의함과 동시에 딱 한 번만 실행되고 사라지는 특별한 함수입니다.
- 조립 시작: 함수가 실행되며 그 안에 변수와 함수(a, b, public 등)를 만듭니다.
- 부품 노출: 필요한 부품(public 객체)만 밖으로 전달(return)합니다.
- 임무 완료 후 사라짐: 실행이 끝나면 함수와 그 안의 private 변수들은 외부에서 접근할 수 없는 자신만의 공간에 갇히게 됩니다.
이런 특징 덕분에 내부 변수들을 안전하게 지키면서 원하는 기능만 외부로 제공하는 '캡슐'을 만들 수 있는 것입니다.
'Computer Science > Design Pattern' 카테고리의 다른 글
| 🅿️ MVP 패턴 (0) | 2025.09.16 |
|---|---|
| ☢️ MVC 패턴 (0) | 2025.09.16 |
| 🔁 이터레이터 패턴 (0) | 2025.09.16 |
| ⛓️ 프록시 패턴과 프록시 서버 (1) | 2025.09.16 |
| 📡 옵저버 패턴 (Observer Pattern) (0) | 2025.09.09 |