주니어 개발자 성장기

1. 싱글톤 패턴 - 기본 본문

CS스터디/디자인 패턴

1. 싱글톤 패턴 - 기본

Junpyo Lee 2023. 3. 12. 01:08

디자인 패턴이란?

In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. 
출처: 위키피디아

소프트웨어 설계 중 특정한 상황에서 흔히 일어나는 문제들에 대한 일반적이고 재사용 가능한 해결책이라고 할 수 있다.

 

수천가지의 디자인 패턴들이 존재하지만 제일 유명한 것은 "Gang of Four" design patterns 에 나온 23가지 디자인 패턴들이다.

싱글톤 패턴

싱글톤 패턴은 하나의 클래스가 오직 하나의 인스턴스만을 갖는 것을 보장하는 생성 디자인 패턴(creational design pattern)이다.

 

장점

  • 단 하나의 인스턴스를 보장하기 때문에 전역적으로 상태를 관리하는 매니저 성격의 클래스에 유용하게 쓰인다.
  • 인스턴스 생성 비용을 줄일 수 있다.

 

단점

  • 불필요한 글로벌 상태(Global state)를 만드는 안티패턴이다.
  • 동시에 2가지 문제를 해결하여 SRP(단일 책임 원칙)을 위반한다.
    • 오직 1개의 인스턴스를 갖는다.
    • 전역적인 접근(static method로 instance를 가져오므로)이 가능하다.
  • 다른 클래스들과의 의존성, 결합도(Coupling)을 높여 단위 테스트를 어렵게 한다.

 

Common uses

  • 데이터베이스 연결 모듈
  • Logging

 

의존성 주입

의존성 주입(DI: Dependency Inject)를 통해 싱글톤의 결합도를 낮출 수 있다.

  • 의존성 주입을 통해 단위 테스트하기 쉬운 구조가 된다.
  • 추상화 레이어를 기반으로 구현체를 주입해주기 때문에 의존성 방향이 일관되고, 모듈간의 관계가 명확해진다.

단점

  • 클래스 수가 늘어나 복잡성이 늘어날 수 있으며 약간의 런타임 페널티가 생길 수 있다.

 

 

의존관계 역전 원칙(Dependency Inversion Principle)

  • 상위 모듈은 하위 모듈에 의존해서는 안 되고 둘 다 추상화에 의존해야 한다.
  • 추상화는 세부 사항에 의존해서는 안 되고 세부사항(구체적인 구현)은 추상화에 의존해야 한다.

DIP를 지킴으로써 상위 모듈과 하위 모듈 간의 의존성을 낮출 수 있다.

 

 

+) 스프링 IoC 컨테이너에서는 의존성 주입을 통해 싱글톤 인스턴스의 Global Access를 차단할 수 있다. 

'CS스터디 > 디자인 패턴' 카테고리의 다른 글

2. 싱글톤 패턴 - 구현(Java)  (0) 2023.03.12