🧐 즉시 실행 함수 (IIFE, Immediately Invoked Function Expression)
(function () { console.log("hello"); })();위와 같이 함수가 선언되자마자 실행되는 함수를 뜻한다. 호출되자마자 반환되어 재사용할 수 없기에 JS에서 불필요한 전역 변수로서 남아있는 함수들을 줄일 수 있어 초기화 코드, library 내 전역 변수의 충돌을 줄일 수 있다.
🧐 접근 제어자 (access modifier)
Java에서 아래표와 같이 변수나 메서드의 사용 권한들을 제어하는 기법이다.
| public | protected | default | private |
|---|---|---|---|
| All | 상속 OR 동일패키지 | 상속 && 동일패키지 | 클래스 내부 |
module : application 중 일부를 독립된 코드로 분리해 만들어 놓은 것을 의미한다. JS에서는 일반적으로 객체 리터럴({...}) 형태로 반환하는데, JS는 전역적으로 처리되기에 하나의 객체를 반환한다는 점에서 Singleton 패턴으로도 볼 수 있고, 독립된 module이라는 점에서 Module 패턴으로도 볼 수 있다. module 패턴에 대해 더 자세한 것은 여기를 참고바란다.불필요한 전역 변수 줄임 : JS는 전역 범위에서 script를 실행하므로, 노출모듈 패턴으로 접근 제어자를 구현하여 불필요한 전역 변수 발생을 막을 수 있다.명시성 : public 메소드와 변수의 이름에 명시적으로 public 표시를 함으로써 명시성을 높인다.private 메소드의 한계 : private 메소드에 접근할 방법이 없기에, 이를 확장하기 어렵다. const module1 = (() => {
const privateFoo = () => {};
const privateBar = [];
const exported = {
publicFoo: () => {},
publicBar: () => {},
};
return exported; //private 범위를 만들고 공개할 부분만 export 합니다.
})();
console.log(module1);
{ publicFoo : [Function: publicFoo],
publicBar : [Function: publicBar] }
https://velog.io/@juijeong8324/Design-Pattern-8
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4
https://chati.tistory.com/176
https://edykim.com/ko/post/revealing-module-pattern/