디자인 패턴1 싱글톤 패턴

Chaeyoung·2024년 1월 7일
0

1.1 디자인 패턴

프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약'형태로 만들어 놓은 것

1.1.1 싱글톤 패턴

  • singlton pattern 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
  • 데이터 베이스 연결 모듈에 많이 사용
  • 장점 : 해당 인스턴스를 다른 오듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어든다.
  • 단점: 의존성이 높아진다.

자바스크립트 싱글톤 패턴

예시 참고

// Singleton.js
let instance;

export default class Singleton {
  constructor(data = "Initial data") {
    if (instance) {
      return instance;
    }
    this.data = data;
    instance = this;
  }

  getData() {
    return this.data;
  }

  setData(data) {
    this.data = data;
  }
}

데이터베이스 연결 모듈

const URL = "mongodb://localhost:27017/app";
const createConnection = url => ({ url: url });

class DB {
  constructor(url) {
    if (!DB.instance) {
      DB.instance = createConnection(url);
    }
    return DB.instance;
  }
  connect() {
    return this.instance;
  }
}

const a = new DB(URL);
const b = new DB(URL);

console.log(a === b); // true

하나의 인스턴스 기반으로 a, b를 생성함으로 데이터베이스 연결에 관한 인스턴스 생성 비용을 아낄 수 있다.

싱글톤 패턴의 단점

  1. 독립적인 인스턴스 생성의 어려움

    TDD(Test Driven Development)를 할 때 단위 테스트를 주로 하는데 단위 테스트는 테스트가 서로 독립적이어야 하며 테스트를 어떤 순서로든 실행할 수 있어야하는데 싱글톤 패턴은 독립적인 인스턴스를 만들기 어렵다.

  2. 모듈 간의 의존성이 강함

    모듈 간의 결합을 강하게 만든다. 의존성 주입(DI, Dependency Injection)을 통해 모듈간의 결합을 조금 더 느슨하게 만들어 해결할 수 있다. * 의존성 주입을 종속성이라고도 한다.

의존성 주입의 장점

모듈들을 쉽게 교체할 수 있는 구조가 되어 테스팅과 마이그레이션이 수월해진다. 구현 시 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어 주기 때문에 애플리케이션 의존성 방향이 일관되고, 애플리케이션을 쉽게 추론할 수있다.

의존성 주입의 단점

오듈들이 더욱더 분리되므로 클래스 수가 늘어나 복잡성이 증가될 수 있고 약간의 런타임 페널티가 발생.

의존성 주입의 원칙

  • 상위 도율은 하위 모듈에서 어떠한 것도 가져오지 않아야한다. 둘 다 추상화에 의존해야하며 추상화는 세부 사항에 의존하지 않아야한다.

추상화란?

프로그래밍에서 추상화란 복잡하고 불필요한 세부 사항을 숨겨 코드를 더 간단하고 읽기 쉽고 유지 관리하기 쉽게 만드는 프로세스.

0개의 댓글