즉시 실행 함수
를 통해 private, public 같은 접근제어자를 만드는 패턴자체적인 비공개(private) 멤버와 공개(public) 멤버
를 가질 수 있도록 설계그렇기 때문에 노출 모듈 패턴을 통해 private나 public 같은 접근 제어자 구현
const pukuba = (() => {
const a = 1
const b = () => 2
const public = {
c : 2,
d : () => 3
}
return public
})()
console.log(pukuba)
console.log(pukuba.a)
// { c: 2, d: [Function: d] }
// undefined
private
의 범위를 가짐자식 클래스에서 접근 가능
하지만 외부 클래스에서 접근 불가능한 범위클래스에 정의된 함수에서
접근 가능하지만 자식 클래스와 외부 클래스에서 접근 불가능한 범위공개된 인터페이스만 외부에 노출
하여 사용자가 모듈을 좀 더 쉽고 안전하게 사용할 수 있다.전역 스코프의 오염 방지
도움 간접적으로 접근하는 방식
을 사용해야 합니다. 이를 통해 비공개 멤버가 의도치 않게 변경되거나 오용되는 것을 방지할 수 있다.정적으로(private/static) 관리
. 이 때문에 인스턴스 생성과 상속과 같은 객체지향 개념을 완전히 지원하지는 않는다.자신이 생성된 환경(lexical environment)을 기억
하는 특성을 의미var MyModule = (function() {
var privateVariable = "This is a private variable";
function privateFunction() {
console.log("This is a private function");
}
function publicFunction() {
console.log("This is a public function");
}
// 외부로 노출할 멤버를 객체로 반환합니다.
return {
publicFunction: publicFunction
};
})();
// MyModule은 publicFunction만 외부에 노출됩니다.
MyModule.publicFunction(); // 출력: "This is a public function"
MyModule.privateVariable; // undefined (privateVariable은 외부에서 접근 불가능)
MyModule.privateFunction(); // 오류 (privateFunction은 외부에서 접근 불가능)
하나의 번들 파일로 결합
하여 최적화하는 도구모듈의존성 순서
를 고려하여 최적화되므로 모듈 로드 시 발생할 수 있는 문제를 사전에 방지