- [CS 전공지식 노트] Topic 1. MVC 패턴
- [CS 전공지식 노트] Topic 2. 노출모듈패턴
- [CS 전공지식 노트] Topic 3. 전략패턴
- [CS 전공지식 노트] Topic 4. 네트워크
- [CS 전공지식 노트] Topic 5. HTTP
- [CS 전공지식 노트] Topic 6. 프로세스와 스레드
- [CS 전공지식 노트] Topic 7. 공유자원과 임계영역, 교착상태
- [CS 전공지식 노트] Topic 8. 선형 자료 구조
[CS 전공지식 노트] Topic 2. 노출모듈패턴
노출 모듈 패턴
자바스크립트의 문제 - 전역 네임스페이스 오염
자바스크립트에서는 모든 변수와 함수가 기본적으로 전역 네임스페이스에 속하게 되어 이름이 충돌할 가능성있습니다.
예를 들어, 두 개의 서로 다른 스크립트 파일이 같은 이름의 전역 변수나 함수를 정의하면, 한 파일에서 정의한 변수나 함수가 다른 파일에서 정의한 것을 덮어쓸 수 있습니다. 이는 예상하지 못한 버그를 유발하고, 디버깅을 어렵게 만듭니다.
노출 모듈 패턴 사용
노출 모듈 패턴(Revealing Module pattern) 은 자바스크립트에서 사용하는 패턴으로, 객체의 일부 프로퍼티와 메서드를 공개하고 일부를 비공개로 유지하는 방식을 제공합니다. 이 패턴은 모듈의 캡슐화를 통해 코드의 유지보수성을 향상시키고, 공개/비공개 멤버를 명확히 구분함으로써 코드의 가독성을 높이는 데 도움을 줍니다. 또한 전역 네임스페이스 오염 문제도 방지할 수 있습니다.
노출 모듈 패턴의 기본 구조는 다음과 같습니다.
var myModule = (function () {
// 비공개 변수
var privateVar = 'I am private...';
// 비공개 함수
var privateMethod = function () {
console.log('Accessing private method');
};
// 공개될 변수와 메서드를 가진 객체를 반환
return {
publicVar: 'I am public...',
publicMethod: function () {
console.log('Accessing public method');
// 공개 함수 내에서 비공개 변수와 메서드에 접근할 수 있음
privateMethod();
console.log(privateVar);
}
};
})();
myModule.publicMethod();
// 'Accessing public method', 'Accessing private method', 'I am private...' 가 출력됨
이 패턴을 사용하면, 모듈의 내부 상태를 보호하고, 어떤 부분을 API로 공개할 것인지 명확히 표현할 수 있습니다. 이렇게 모듈화된 코드는 테스트와 유지보수가 쉽습니다. 또한 이 패턴은 즉시 실행 함수 표현식 (IIFE, Immediately Invoked Function Expression)을 사용하므로 모듈의 초기화 로직을 즉시 실행시킬 수 있습니다
즉시 실행 함수 표현식
즉시 실행 함수 표현식(Immediately Invoked Function Expression, IIFE)은 자바스크립트에서 사용하는 디자인 패턴 중 하나입니다. 이 패턴은 함수를 선언함과 동시에 즉시 실행합니다. 기본 구조는 다음과 같습니다:
(function () {
// statements
})();
이 패턴의 주요 이점 중 하나는 변수의 스코프를 제한하여 전역 네임스페이스를 오염시키지 않는 것입니다. IIFE 내에 선언된 변수들은 함수가 종료되면 메모리에서 제거되므로, 메모리 관리 측면에서도 효율적입니다.
이 패턴을 사용하면, 애플리케이션이 로드되자마자 함수가 실행되어 초기화 로직을 처리할 수 있습니다. 이러한 특성으로 인해 IIFE는 주로 플러그인이나 라이브러리 등을 개발할 때 사용됩니다.
예를 들어, 아래와 같은 상황에서 IIFE 를 사용할 수 있습니다:
(function () {
// 선언한 변수는 이 함수 내에서만 접근 가능
var firstName = 'John';
var lastName = 'Doe';
// 초기화 로직
var greeting = 'Hello, ' + firstName + ' ' + lastName;
console.log(greeting); // 'Hello, John Doe' 출력
// 이렇게 함수를 선언하고 즉시 실행하면,
// firstName, lastName, greeting 변수는 이 함수 스코프 내에서만 존재하며, 함수 외부에서는 접근할 수 없습니다.
})();
예상 질문 및 답변
노출 모듈 패턴이란?
노출 모듈 패턴은 자바스크립트에서 사용하는 패턴으로, 객체의 일부 프로퍼티와 메서드를 공개하고 일부를 비공개로 유지하는 방식을 제공합니다. 이 패턴은 모듈의 캡슐화를 통해 코드의 유지보수성을 향상시키고, 공개/비공개 멤버를 명확히 구분함으로써 코드의 가독성을 높이는 데 도움을 줍니다.
자바에서 노출 모듈 패턴이 없는 이유?
노출 모듈 패턴은 기본적으로 자바스크립트와 같은 언어에서 발생하는 특정 문제, 즉 전역 네임스페이스 오염 문제를 해결하기 위한 디자인 패턴입니다. 자바스크립트에서는 모든 변수와 함수가 기본적으로 전역 네임스페이스에 속하기 때문에 충돌이 발생할 수 있는데, 이를 방지하기 위해 모듈 패턴을 사용합니다.
반면에 자바에서는 패키지와 클래스를 사용하여 네임스페이스를 구분하고, private, protected, public 등의 접근 제어자를 사용하여 클래스 내부의 멤버에 대한 접근을 제어할 수 있습니다. 따라서 자바에서는 노출 모듈 패턴과 같은 디자인 패턴이 필요 없습니다.
댓글남기기