본문 바로가기
Computer Science/CS

[디자인 패턴] #1. 싱글톤 패턴 (singleton pattern)

by HelloJudy 2022. 6. 10.

0. 개요

 

기존 Model 코드에서는 다음과 같은 패턴으로 코드를 짰다.

 

class CocktailModel {
  static findCocktail = async ({ name }) => {
    const findCocktail = await Cocktail.findOne({ name: name });
    return findCocktail;
  };
  
  static getIncludedCocktail = async (query) => {
    const cocktailList = await Cocktail.find({
      name: { $regex: query },
    });
    return cocktailList;
  };

  static modify = async (filter, cocktail) => {
    const { originName, user } = filter;

    const option = { returnOriginal: false };
    const modifiedCocktail = await Cocktail.findOneAndUpdate(
      {
        name: originName,
        userId: user,
      },
      cocktail,
      option
    );
    return modifiedCocktail;
  };
  }

 

그런데! 새로 알게된 패턴! 새로운 팀 백엔드 분은 이런 패턴을 사용하셨다!! 궁금하다 😯🤔

싱글톤 패턴은 어떤 것인지 공부해보자!

 

const User = {
  addUser: async (newUserData: IUserInput) => {
    const user = await Users.create(newUserData);
    return user;
  },
  findByEmail: async (email: string) => {
    const user = await Users.findOne({ where: { email: email } });
    return user;
  },
 }

 


 

1. 싱글톤 패턴

하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴

 

즉, 특정 클래스의 인스턴스는 오직 하나만 생성될 수 있고, 한 클래스에서 처음 객체를 생성하면 다음 새로 생성한 객체도 같은 값을 return 받는다.

 

이 패턴은 보통 데이터베이스 연결 모듈에 많이 사용한다.

 

또한 인스턴스 한 개로 여러 요청을 처리할 수 있다면 메모리상에서 효율적이며 객체의 추가적인 생성이 없으므로 성능이 빠르다.

 

 

  • 장점: 하나의 인스턴스를 다른 모듈들이 공유하면서 사용, 인스턴스 생성 비용 줄어든다.
  • 단점: 의존성 높아진다.

 

 

2. 단점

 

  • TDD에서 단위 테스트를 할 때 불편하다.

 

단위 테스트는 함수 별로 독립적으로 해야하는데 싱글톤은 각 테스트마다 '독립적인' 인스턴스를 만들기가 어렵다.

 

 

  • 의존성

 

편리한 대신 모듈 간 결합을 강하게 만들 수 있다.

반응형

댓글