[3일차] Revealing Module 패턴

sani·2023년 6월 9일

CS스터디

목록 보기
3/7

🌱 사전 지식

🧐 즉시 실행 함수 (IIFE, Immediately Invoked Function Expression)

(function () {
  console.log("hello");
})();

위와 같이 함수가 선언되자마자 실행되는 함수를 뜻한다. 호출되자마자 반환되어 재사용할 수 없기에 JS에서 불필요한 전역 변수로서 남아있는 함수들을 줄일 수 있어 초기화 코드, library 내 전역 변수의 충돌을 줄일 수 있다.

🧐 접근 제어자 (access modifier)
Java에서 아래표와 같이 변수나 메서드의 사용 권한들을 제어하는 기법이다.

publicprotecteddefaultprivate
All상속 OR 동일패키지상속 && 동일패키지클래스 내부

Revealing Module 패턴

  • 즉시 실행 함수를 통해 Java의 private, public과 같은 접근 제어자를 만드는 패턴이다.
  • module : application 중 일부를 독립된 코드로 분리해 만들어 놓은 것을 의미한다. JS에서는 일반적으로 객체 리터럴({...}) 형태로 반환하는데, JS는 전역적으로 처리되기에 하나의 객체를 반환한다는 점에서 Singleton 패턴으로도 볼 수 있고, 독립된 module이라는 점에서 Module 패턴으로도 볼 수 있다. module 패턴에 대해 더 자세한 것은 여기를 참고바란다.

특징

  • 불필요한 전역 변수 줄임 : JS는 전역 범위에서 script를 실행하므로, 노출모듈 패턴으로 접근 제어자를 구현하여 불필요한 전역 변수 발생을 막을 수 있다.
  • 명시성 : public 메소드와 변수의 이름에 명시적으로 public 표시를 함으로써 명시성을 높인다.
  • private 메소드의 한계 : private 메소드에 접근할 방법이 없기에, 이를 확장하기 어렵다.

JS 예시

const module1 = (() => {
  const privateFoo = () => {};
  const privateBar = [];

  const exported = {
    publicFoo: () => {},
    publicBar: () => {},
  };

  return exported; //private 범위를 만들고 공개할 부분만 export 합니다.
})();

console.log(module1);
{ publicFoo : [Function: publicFoo],
  publicBar : [Function: publicBar] }


출처

https://velog.io/@juijeong8324/Design-Pattern-8
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4
https://chati.tistory.com/176
https://edykim.com/ko/post/revealing-module-pattern/

profile
블로그 이전했습니다. https://devsan.tistory.com/

0개의 댓글