노출모듈 패턴이란?
즉시 실행함수를 통해 private, public 같은 접근 제어자를 만드는 패턴을 말한다
자바스크립트는 private나 public 같은 접근 제어자가 존재하지않고
전역 범위에서 스크립트가 실행된다
그렇기 때문에 노출모듈 패턴을 통해 private나 public 접근제어자를 구현하기도 한다
장점으로는
- 개발자에게 깔끔한 접근 방법을 제공한다
- private 데이터 제공한다
- 전역 변수를 덜 더럽힌다
- 클로저를 통해 함수와 변수를 지역화 한다
- 스크립트 문법이 더 일관성 있다
- 명시적으로 public 메소드와 변수를 제공해 명시성을 높인다
단점으로는
- private 메소드 접근할 방법이 없다
(이런 메소드에 대한 테스트의 어려움을 이야기하기도 하지만
함수 무결성을 고려할 때 공개된 메소드만 테스트 하는게 맞다)
- private 메소드에 대해 함수 확장하는데 어려움이 있다
- 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
a와 b는 다른 모듈에서 사용할 수 있는 변수나 함수인 private 범위를 가진다
다른 모듈에서 접근할 수 없고 c와 d는 다른 모듈에서 사용할 수 있는 변수나 함수인
public 범위를 가진다
참고로 이 원리를 기반으로 만든 자바스크립트 모듈 방식으로는
CJS(CommonJS) 모듈 방식이 있다
'CS' 카테고리의 다른 글
| [CS] 선언형과 함수형 프로그래밍 (0) | 2022.10.22 |
|---|---|
| [CS] MVC, MVP, MVVM 비교 해보기 (0) | 2022.10.21 |
| [CS] 이터레이터 패턴 (0) | 2022.10.20 |
| [CS] 프록시 패턴 (0) | 2022.10.19 |
| [CS] 웹 (WEB)과 웹 어플리케이션 서버 (WAS) (0) | 2022.10.18 |