[javascript] 모듈 패턴에서의 비공개 멤버와 공개 멤버는 무엇인가요?

비공개(private) 멤버

모듈 패턴에서 비공개 멤버는 클로저를 통해 구현됩니다. 함수 내부에 선언된 변수나 함수는 외부에서 접근할 수 없으며, 해당 모듈 내부에서만 유효합니다. 이를 통해 정보 은폐와 캡슐화(Encapsulation)가 가능해집니다. 이러한 비공개 멤버를 통해 모듈의 내부 상태를 보호하고 외부에서의 직접 접근을 방지할 수 있습니다.

비공개 멤버의 예시:

const module = (function() {
  let privateVar = 'I am private';

  function privateFunction() {
    console.log('This is a private function');
  }

  return {
    publicFunction: function() {
      console.log('This is a public function');
    }
  };
})();

위의 예시에서 privateVarprivateFunction은 모듈 내부의 비공개 멤버로, 외부에서 직접 접근할 수 없습니다.

공개(public) 멤버

모듈 패턴에서 공개 멤버는 해당 모듈을 사용하는 다른 코드에서 접근이 가능한 멤버를 말합니다. 모듈 패턴에서 공개 멤버는 반환된 객체의 속성이나 메소드로 정의되며, 이를 통해 모듈 외부에서 해당 멤버에 접근이 가능합니다.

공개 멤버의 예시:

const module = (function() {
  let privateVar = 'I am private';

  function privateFunction() {
    console.log('This is a private function');
  }

  return {
    publicVar: 'I am public',
    publicFunction: function() {
      console.log('This is a public function');
    }
  };
})();

위의 예시에서 publicVarpublicFunction은 모듈 내에서 비공개 멤버에 접근하거나 조작할 수 있는 공개 멤버로, 외부에서 직접 접근할 수 있습니다.

모듈 패턴을 통해 비공개 멤버와 공개 멤버를 구분하여 모듈을 구현하면, 모듈 간의 상호작용이나 외부 코드와의 결합도를 낮출 수 있으며, 재사용성과 유지보수성을 높일 수 있습니다.