본문 바로가기

카테고리 없음

디자인 패턴, 싱글톤 패턴

디자인 패턴 종류

생성 패턴 (5개) 구조 패턴 (7개) 행동 패턴 (11개)
싱글톤 (Singleton) 어댑터 (Adapter) 책임 연쇄 (Chain-of-Responsibility)
팩토리 메소드 (Factory Method) 브릿지 (Bridge) 커맨드 (Command)
추상 팩토리 (Abstract Factory) 컴포짓 (Composite) 인터프리터 (Interpreter)
빌더 (Builder) 데코레이터 (Decorator) 이터레이터 (Iterator)
프로토타입 (Prototype) 퍼사드 (Facade) 중재자 (Mediator)
  플라이웨이트 (Flyweight) 메멘토 (Memento)
  프록시 (Proxy) 옵저버 (Observer)
    상태 (State)
    전략 (Strategy)
    템플릿 메소드 (Template Method)
    비지터 (Visitor)

 

 

싱글톤(Singleton) 패턴이란?

싱글톤 패턴은 특정 클래스의 인스턴스를 1개만 생성되는 것을 보장하는 디자인 패턴이다. 즉, 생성자를 통해서 여러 번 호출이 되더라도 인스턴스를 새로 생성하지 않고 최초 호출 시에 만들어두었던 인스턴스를 재활용하는 패턴이다

 

  • 인스턴스를 오직 1개만 만들어야 하는 경우에 사용

싱글톤 패턴의 문제점

하지만 이러한 싱글톤 패턴에도 많은 문제점이 존재한다.

1. 의존성이 높아진다.

싱글톤 패턴을 사용하는 경우 클래스의 객체를 미리 생성한 뒤에 필요한 경우 정적 메서드를 이용하기 대문에 클래스 사이에 의존성이 높아지게 된다는 문제점이 있다. (= 높은 결합)

싱글톤의 인스턴스가 변경 되면 해당 인스턴스를 참조하는 모든 클래스들을 수정해야 하는 문제가 발생한다.

2. private 생성자 때문에 상속이 어렵다.

싱글톤 패턴은 기본 생성자를 private로 만들었기 때문에 상속을 통한 자식 클래스를 만들 수 없다는 문제점이 있다. 즉, 자바의 객체지향 언어의 장점 중 하나인 다형성을 적용하지 못한다는 문제로 이어진다.

3. 테스트하기가 힘들다.

싱글톤 패턴의 인스턴스는 자원을 공유하고 있다는 특징이 있다. 이는 서로 독립적이어야 하는 단위 테스트를 하는데 문제가 된다.

독립적인 테스트가 진행이 되려면 전역에서 상태를 공유하고 있는 인스턴스의 상태를 매번 초기화해야 한다. 초기화해주지 않으면 전역에서 상태를 공유 중이기 때문에 테스트가 정상적으로 수행되지 못할 가능성이 존재한다.

이러한 문제점들 때문에 싱글톤 패턴은 안티패턴이라고 불리기도 한다.

그래서 싱글톤 패턴을 직접 구현하기 보다는 스프링의 도움을 받아 위와 같은 문제점을 보완하면서도 싱글톤 패턴의 장점을 누릴 수 있도록 이용하고 있다.

728x90