[Design Pattern] Singleton Pattern

먹보·2023년 1월 27일
0

MUK_BO's Design Pattern

목록 보기
1/9

지금까지 2~3개의 프로젝트를 해보면서 사용했던 디자인 패턴은 MVC 중 하나인 Layered Pattern으로 구조가 잘 잡혀있고 관심사 분리가 명확한 것 같아 어느정도의 경력이 쌓일 때 까지는 다른 디자인 패턴들은 관심사 밖으로 두려고 했으나 최근 기업협업 및 오픈 소스 코드들을 보면서 MVC 패턴을 잘 보지 못하다보니 다른 디자인 패턴들도 어느정도는 알아 두어야 할 것 같아 끄적여본다.

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

✍ Definition of Singleton Pattern

싱글톤 패턴은 디자인 패턴 중에서 가장 널리 알려진 패턴 중 하나이지만 사실 필자는...입문자다보니 저번 원티드 온라인 강의 때 처음 들어보았다..

간단히 정의해보자면...

싱글톤(Singleton) 패턴은 객체의 인스턴스가 오직 1개만(Single) 생성되는 패턴을 의미한다

생성자가 여러번 호출되도, 실제로 생성되는 객체는 하나이며 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환시키도록 만드는 것이다

사실 이렇게 정의하고 나서 든 생각은 다음과 같다..

  1. 만약 2개 생성하고 싶으면 어떻게 해야하지?
  2. 잠만, 데이터베이스 연결 모듈 자체가 생각해보면 Singleton Pattern 아닌가? 내가 이미 부분적으로 사용하고 있는 건가?
  3. 어? NestJs Singleton 아닌가? => 맞다!
    그렇기 떄문에 사용 이유를 파악해야 하며, 단점도 제대로 알아봐야 할 것 같다.

✍ Singleton Pattern의 장점

  1. 단일 인스턴스이므로 메모리 측면에서 볼 때, 메모리 낭비가 방지된다.
    => 애초에 2개 생성 기획을 안잡으면 되는건가?
  2. 전역 인스턴스이므로 다른 클래스의 접근이 용이하여 데이터 공유가 원활하다.
    => 이걸 생각해보면, 데이터베이스와 Configuration 잡는 것도 사실 단일 인스턴스이기 때문에 이걸 끌어와서 다른 모듈에 적용한다는 점을 생각했을 때, 데이터베이스 Configuaration 자체가 Singleton Pattern으로 생각할 수 있다.

✍ Singleton Pattern의 단점

  1. 단일 인스턴스이기에, 다른 클래스의 필요에 따라 공유를 해야하므로 의존성이 높아진다.
    => 그렇기에 TDD가 복잡해진다.
    => 의존성 주입으로 이 문제를 해결 할 수 있지만, 이 건 다음 기회에 조금 더 자세하게 알아보도록 하자.
profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글