본문 바로가기
공부

[CS 공부] 디자인 패턴 - 싱글톤 패턴, 팩토리 패턴

by 잰쟁 2023. 12. 10.
728x90

 

◎ 디자인 패턴

: 프로그램들을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록

하나의 '규약' 형태로 만들어 놓은 것.

 


 

1.  싱글톤 패턴 (singleton pattern)

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

: 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용

: 데이터베이스 모듈에 많이 사용

 

 

○ 장점

  • - 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하므로 인스턴스 생성시 비용이 적음.

 

○ 단점

  • - TDD(Test Driven Development)를 할 때 어려움이 있음.

       --> TDD는 단위 테스트를 주로 하는데, 단위 테스트는 각 테스트가 서로 독립적이어야 하고 테스트를 어떤 순서로든 실행할 수 있어야함.

       --> 하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴 -> 각 테스트마다 '독립적인' 인스턴스를 만들기 어려움.

  • - 인스턴스를 다른 모듈들이 공유  ->  의존성이 높아짐.
  •  

 

 

의존성 주입(DI, Dependency Injection)

 

: '의존성 주입자(dependency injector)'가 개입하여 메인 모듈이 '간접적'으로 의존성을 주입하는 방식.

  • - 메인 모듈(상위 모듈)은 하위 모듈에 대한 의존성 감소 (aka. 디커플링 됨)
  • - 모듈간의 결합을 조금 더 느슨하게 만들어줌  --> 싱글톤패턴의 존속성 및 의존성이 높은 단점 해소

 

○ 의존성 주입 원칙

  ① 상위 모듈은 하위 모듈에서 어떤 것도 가져오지 않음.

  ② 둘 다 추상화에 의존해야 함. 이때 추상화는 세부 사항에 의존하지 말아야 함.

 

 

장점

  • - 모듈 쉽게 교체 가능 --> 테스팅 및 마이그레이션(migration)이 용이
  • - 구현 시 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어줌

        --> 애플리케이션 의존성 방향 일관됨

        --> 애플리케이션 쉽게 추론 가능

        --> 모듈 간 관계들이 좀 더 명확해짐

 

단점

  • - 클래수 수 증가 --> 복잡성 증가 및 약간의 런타임 패널티 생길 수 있음

 

 


 

2. 팩토리 패턴 (factory pattern) 

 

: 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴

: 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴

 

장점

  • 상위 클래스, 하위 클래스 분리 --> 결합 느슨함, 유연성 증가
  • 객체 생성 로직이 분리 --> 코드를 리팩터링하기 쉬움 --> 유지보수성 증가