반응형
ES 모듈로 내부 캡슐화
세 파일 publication.mjs, blogpost.mjs, main.mjs는 현대적인 JavaScript 개발 방식인 모듈 패턴을 따르고 있습니다. 각 파일의 관계와 구조는 다음과 같습니다.

publication.mjs:
- 이 모듈은 출판물의 정보를 출력하는 기본 기능을 제공합니다.
printDetails함수는 출판물의 제목, 저자, 발행일을 콘솔에 출력합니다. 이 함수는 모듈 내부에서만 사용되며 외부로 내보내지 않습니다.create함수는 외부로export되어, 이 모듈을 사용하는 다른 모듈에서 호출할 수 있게 합니다. 이 함수는 출판물 객체를 생성하고,print메소드를 포함한publicAPI객체를 반환합니다.
function printDetails(title, author, pubDate) {
console.log(`
제목: ${title}
저자: ${author}
발행일: ${pubDate}
`);
}
export function create(title, author, pubDate) {
var publicAPI = {
print() {
printDetails(title, author, pubDate);
}
};
return publicAPI;
}
blogpost.mjs:
- 이 모듈은
publication.mjs모듈을 확장하여 블로그 포스트 관련 기능을 추가합니다. createPub함수는publication.mjs에서 가져온create함수를 이용하여 블로그 포스트 객체를 만듭니다.printDetails함수(이름이publication.mjs에 있는 함수와 같지만, 별개의 함수임)는 블로그 포스트 객체의 정보와 URL을 출력합니다.create함수는publication모듈의create함수를 활용하여pub객체를 생성하고, 블로그 포스트에 특화된print메소드를 포함한publicAPI객체를 반환합니다.
import {create as createPub} from "./publication.mjs";
function printDetails(pub, URL) {
pub.print();
console.log(URL);
}
export function create(title, author, pubDate, URL) {
var pub = createPub(title, author, pubDate);
var publicAPI = {
print() {
printDetails(pub, URL);
}
};
return publicAPI;
}
main.mjs:
- 애플리케이션의 진입점(entry point)입니다.
blogpost.mjs모듈에서create함수를 가져와(newBlogPost로 이름을 변경하여) 블로그 포스트 객체를 생성하고,print메소드를 호출합니다.print호출 결과로, 블로그 포스트의 제목, 저자, 발행일과 URL이 출력됩니다.
import {create as newBlogPost} from "./blogpost.mjs";
var forAgainstlet = newBlogPost(
"글이 길인가 II",
"김종남",
"2024년 4월 10일",
"https://easyfly.tistory.com"
);
forAgainstlet.print();
모듈 사용을 이용한 캡슐화:
- 모듈화와 코드 재사용: 코드는 모듈화가 잘 되어 있어, 각 파일은 특정 기능을 담당하고 있습니다.
publication.mjs는 재사용 가능한 출판물 관련 기능을 제공하며,blogpost.mjs는 이를 블로그 포스트에 맞게 확장합니다. - 단일 책임 원칙: 각 모듈은 단일 책임을 가지며, 한 가지 기능만을 수행합니다. 이 원칙은 유지보수성과 가독성을 향상시키는 데 도움이 됩니다.
- 의존성 관리:
blogpost.mjs는publication.mjs에 명시적으로 의존하고 있으며, 이는import문을 통해 선언됩니다. 이렇게 명시적인 의존성은 코드의 흐름을 이해하고 디버깅할 때 도움이 됩니다. - 확장성:
publication.mjs의 구조를 보면, 추후 다른 유형의 출판물 객체를 생성할 때 재사용할 수 있는 방식으로 설계되었습니다.
이러한 구조적 특성과 강조점을 바탕으로, 코드의 가독성과 확장성을 높이면서 안정적으로 동작하도록 개선할 수 있습니다.
반응형
'도서로 공부하는 프로그래밍 > 코딩 자율학습' 카테고리의 다른 글
| [JS] 이터러블(Iterable)과 이터레이터(Iterator) (52) | 2024.04.21 |
|---|---|
| [JS] reduce() 메소드 사용 사례 (46) | 2024.04.20 |
| [NodeJS] 클래스 활용하기 (55) | 2024.04.16 |
| [JS] 타입 강제변환의 사례 (47) | 2024.04.15 |
| [JS] 타입의 강제 변환 (38) | 2024.04.14 |