본문으로 바로가기

[Java] 디자인 패턴 - 싱글톤(Singleton) 패턴

category TIL/Java 2022. 6. 1. 18:16

싱글톤 패턴

생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고
최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하는 디자인 유형
  • 주로 공통된 객체를 여러개 생성해서 사용
  • 생성자를 private으로 선언
    • new를 통한 객체 생성 불가
    • 직접적인 접근 불가

구현

class SingleTon {
    private static let Instance = SingleTon()
   
    private init() { }
}
  • static을 사용해 인스턴스를 저장할 프로퍼티 생성
  • 인스턴스의 재생성을 막기 위해 init() 함수의 접근 제어자를 private으로 지정

사용 사례

  • DataBase Connection Pool(DBCP)
  • 환경설정, 네트워크 객체, 로그인 정보 등을 특정 용도로 생성

장점

  • 메모리 낭비 방지
  • 전역성을 띄므로 다른 객체와 공유가 용이
  • 두 번째 이용할 때 부터는 객체 로딩 시간이 감소

문제점

  • 싱글톤 객체의 역할이 복잡한 경우
    해당 객체를 사용하는 다른 객체 간의 결함도가 높아지므로
    객체 지향 설계 원칙에 어긋남 (개방-폐쇄 원칙)

↓ 개방 폐쇄 원칙 (OCP: Open-Closed Principle)

더보기

개방 폐쇄 원칙 (OCP: Open-Closed Principle)

소프트웨어 엔티티(클래스, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 변경에 대해서는 닫혀 있어야 함
  • 기존 코드를 변경하지 않음
  • 기능은 추가할 수 있어야 함
  • 주로 객체지향의 추상화, 다형성을 활용

 

  • 싱글톤 객체의 수정이 어렵고 유지보수의 비용이 많이 들음
  • 멀티스레드 환경에서 동기화 처리를 하지 않으면, 인스턴스가 2개가 생성될 수 있음

[ 출처 ]

https://ko.wikipedia.org/wiki/%EC%8B%B1%EA%B8%80%ED%84%B4_%ED%8C%A8%ED%84%B4 

https://velog.io/@hayeon/Singleton-%ED%8C%A8%ED%84%B4%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0%EB%A5%BC-%EC%98%88%EB%A5%BC-%EB%93%A4%EC%96%B4-%EC%84%A4%EB%AA%85%ED%95%98%EC%8B%9C%EC%98%A4