싱글톤 패턴

하나의 클래스, 하나의 인스턴스로만 로직을 구성하고, 보통 데이터 베이스 연결 모듈에서 사용한다.

실제 적용 예시

  • 국가 / 정부를 예로 들수 있다. 하나의 공식 정부 국가가 있고 우리는 국가 코드로 개인이 관리된다. 접근은 국가코드로 글로벌 하게 할수 있다. (2개의 같으 국가는 존재하지 않음)
  • 단일 인스턴스로 적격인 것은 데이터베이스 객체, 프론트엔드 내부 스토어등이 있다.
class Singleton {
  constructor() {
    if (!Singleton.instance) {
      Singleton.instance = this; // 요기가 핵심
    }
    return Singleton.instance;
  }
  getInstance() {
    return this;
  }
}
const a = new Singleton();
const b = new Singleton();
console.log(a === b); // true

언제 사용할까?

전역 변수 상태를 엄격하게 관리해야 할때 주로 사용한다.

장점.

  • 하나의 인스턴스 생성만 하므로 비용이 줄어듬 (메모리)
  • 클래스가 하나의 인스턴스만 있다는 확신!
  • 클래스간 데이터 공유 쉽다. 전역 인스턴스이기 때문에!
  • 처음 요청때만 초기화된다.

단점

  • 패턴 구현 코드가 필수된다. ex) if (!C.instance)
  • a와 b의 결합도가 높아짐. (a의 변경사항이 b에도 적용 또는 적용해야함) » 의존성 주입으로 해결가능 DI
  • TDD가 어려워짐 (테스트는 독립적이여야 하는데 테스트 도중 다른 테스트를 방해한다. 왜냐. 서로 강한 결합이 되어 있으므로…)
  • 기본적으로 SOLID 원칙 중 DIP를 위반하게 되고 OCP 원칙 또한 위반이다.

DIP 의존성 역전 원칙 (DIP: Dependency Inversion Principle)

상위 모듈은 하위 모듈에 영향을 받으면 안된다.

OCP 개방-폐쇄 원칙 (OCP: Open-Closed Principle)

확장에는 유연하고 변경에는 페쇄적이여야 한다.