본문 바로가기
도서로 공부하는 프로그래밍/코딩 자율학습

[NodeJS] ES 모듈로 내부 캡슐화

by 열공노년 2024. 4. 17.
반응형

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.mjspublication.mjs에 명시적으로 의존하고 있으며, 이는 import 문을 통해 선언됩니다. 이렇게 명시적인 의존성은 코드의 흐름을 이해하고 디버깅할 때 도움이 됩니다.
  • 확장성: publication.mjs의 구조를 보면, 추후 다른 유형의 출판물 객체를 생성할 때 재사용할 수 있는 방식으로 설계되었습니다.

이러한 구조적 특성과 강조점을 바탕으로, 코드의 가독성과 확장성을 높이면서 안정적으로 동작하도록 개선할 수 있습니다.

반응형