디자인패턴
노출 모듈 패턴 (Revealing Module Pattern)
traveler_JH
2024. 12. 17. 22:30
노출 모듈 패턴 (Revealing Module Pattern)
-
- 자바스크립트의 모듈 패턴의 변형으로, 객체 내부의 비공개(private) 변수와 메서드는 숨기고, 외부에 노출할 멤버를 명시적으로 선언하여 관리하는 디자인 패턴
노출모듈 패턴의 핵심
- 명시적 노출
- 어떤 메서드와 변수를 외부에 공개할지 명확하게 제어할 수 있다.
- 캡슐화
- 비공개 변수나 메서드는 클로저를 통해 외부에서 접근할 수 없도록 숨길 수 있다.
- 가독성 향상
- 공개된(public) 메서드와 비공개(private) 메서드를 분리하여 코드를 더 명확하게 만든다.
구성요소
-
- Context
- 전략을 사용하는 주체
- 알고리즘(전략)을 실행하기위해 Strategy객체를 참조
- Strategy
- 동작(알고리즘)의 인터페이스 또는 추상 클래스
- 동작의 공통된 인터페이스를 정의
- ConcreteStrategy
- Strategy 인터페이스를 구현하는 구체적인 알고리즘 클래스
- 다양한 방식으로 동작을 제공하며, 실행시에 Context에서 이를 선택
- Context
예제
const CounterModule = (function () {
// 비공개 변수
let count = 0;
// 비공개 메서드
function logCount() {
console.log("Current count:", count);
}
// 공개 메서드
return {
increment: function () {
count++;
logCount();
},
decrement: function () {
count--;
logCount();
},
reset: function () {
count = 0;
logCount();
},
getCount: function () {
return count;
}
};
})();
// 사용
CounterModule.increment(); // Current count: 1
CounterModule.increment(); // Current count: 2
CounterModule.decrement(); // Current count: 1
console.log(CounterModule.getCount()); // 1
CounterModule.reset(); // Current count: 0
작동 방식
-
- 즉시 실행 함수 (IIFE)
- 코드의 핵심은 즉시 실행 함수(IIFE)로, 모듈을 정의하는 즉시 실행
- 내부에 정의된 변수와 함수(count, logCount)는 클로저로 감싸져 외부에서 직접 접근할 수 없다
- 비공개 변수 및 메서드
- count 변수와 logCount 메서드는 함수 내부에서만 접근 가능.
- 클로저를 통해 값을 유지하고 관리합니다.
- 공개 메서드 반환
- return문을 사용하여 외부에서 접근 가능한 메서드를 명시적으로 정의
- 공개된 메서드(increment, decrement, reset, getCount)는 내부에서 비공개 변수와 메서드에 접근할 수 있다.
- 공개 메서드 사용
- 공개된 메서드는 외부에서 사용할 수 있으며, 이를 통해 count 값을 안전하게 수정하고 조회할 수 있다
- 즉시 실행 함수 (IIFE)
코드 실행 흐름
- 모듈 초기화
- 즉시 실행 함수가 실행되며 CounterModule 객체를 생성.
- 비공개 변수 count가 0으로 초기화되고, 비공개 메서드 logCount와 공개 메서드들이 설정됨.
- 공개 메서드 호출
- increment를 호출하면 count가 증가하고 logCount가 실행되어 현재 값을 출력.
- decrement, reset도 동일한 방식으로 작동.
- 비공개 변수 유지
- 외부에서 count를 직접 수정할 수 없고, 오직 공개 메서드를 통해서만 접근 가능.
- 안전한 데이터 관리
- getCount를 통해 count 값을 읽을 수 있으나, 외부에서 직접 변경할 수는 없음.
노출모듈 패턴의 장점
- 캡슐화
- 내부 데이터를 숨기고, 외부에는 필요한 기능만 노출.
- 명확한 인터페이스
- 어떤 기능이 외부에서 접근 가능한지 명확히 정의.
- 충돌 방지
- 전역 네임스페이스 오염을 줄이고 모듈화된 코드를 작성 가능.
노출모듈 패턴의 단점
- 테스트 어려움
- 비공개 메서드와 변수는 외부에서 접근 불가능하므로 테스트가 어려울 수 있음.
- 유지보수 복잡성
- 지나치게 많은 비공개 메서드가 있으면 코드 유지보수가 어려워질 수 있음.
- 클로저 오버헤드
- 클로저를 사용하기 때문에 메모리 사용량이 증가할 가능성 있음.
노출모듈 패턴이 적합한 상황
- 모듈화가 필요한 경우:
- 큰 프로젝트에서 코드를 조직화하고 전역 변수 충돌을 방지하려는 경우.
- 비공개 데이터 보호:
- 중요한 데이터나 메서드를 외부에서 직접 수정하지 못하도록 보호하려는 경우.