Skip to content

Singleton Design Pattern

Namgyu Park edited this page Jun 21, 2020 · 22 revisions

하나의 클래스에 하나의 객체만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴 하나의 인스턴스만을 생성하는 책임이 있으며 getInstance 전역 메서드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환하는 작업을 수행한다.

  1. 장점 :
  • 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있음
  • 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.
  • 매번 특정 객체를 생성할 필요 없이 하나만 생성된 객체를 어디에서든지 참초할 수 있다. 실생활에 적용하자면 프린터 하나를 여러명이서 사용할 경우를 예로 들 수 있다. 안드로이드 앱 같은 경우 각 액티비티나 클래스별로 주요 클래스들을 일일이 전달하기가 번거롭기 때문에 싱글톤 클래스를 만들어 어디서나 접근하도록 설계하는 것이 편함
  1. 단점 :

싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 "개방-폐쇄 원칙" 을 위배하게 된다. (=객체 지향 설계 원칙에 어긋남) 따라서 수정이 어려워지고 테스트하기 어려워진다.

multithreading 환경에서 Singleton 패턴을 사용한 클래스에 접근할 때, instance 가 1개 이상 생성되는 경우가 발생 (경합 조건 Race condition) : 경합 조건이란? 메모리와 같은 동일한 자원을 2개 이상의 스레드가 이용하려고 경합하는 현상 (Lazy initialization (늦은 초기화 방식)을 사용할 경우 문제가 발생)

결론 : 꼭 필요한 경우아니면 지양해야함. (적절히 잘 쓰면 아주 좋음)

Clone this wiki locally