반응형
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 |