시작이 반

싱글턴 패턴(Singleton pattern) 본문

Programming/기타

싱글턴 패턴(Singleton pattern)

G_Gi 2021. 2. 18. 16:54
SMALL

싱글턴이란?

싱글턴 패턴은 인스턴스가 오직 1개만 생성되야 하는 경우에 사용되는 패턴이다.

생성자가 여러번 호출되도 처음 호출할때만 생성되고 다음부턴 처음 생성된 객체를 반환 하는 형식

 

객체가 한개만 생성되기때문에 메모리에 이점이 있다.

두번째 호출부터 로딩시간이 줄어들어 효율을 높일 수 있다.

 

싱글턴을 만들때 동시성 문제를 고려해서 설계해야 한다.

싱글턴으로 생성된 객체가 다른 클래스의 객체들과 많은 데이터를 공유할 경우 OCP원칙(Open-Closed-Principle : 개방 폐쇄 원칙)을 어기게 된다.

 

개방-폐쇄 원칙(OCP, Open-Closed Principle)은 '소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다'는 프로그래밍 원칙이다.

public class Single {
  
  private Single(){
  }
  
  public static Single getInstance() {
    return LazyHolder.INSTANCE;
  }
  
  private static class LazyHolder{
    private static final Single INSTANCE = new Single();
  }
}

Thread-Safe하며 많이 쓰이는 방법이다.

getInstance를 생성하기 전까지 생성이 되지 않는다.

 

싱글톤 방식의 주의점

  • 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안됨
  • 무상태(stateless)로 설계해야 한다.
    • 특정 클라이언트에 의존적인 필드가 있으면 안됨
    • 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안됨
    • 가급적 읽기만 가능해야 함
    • 필드 대신에 자바에서 공유되지 않는 지역변수, 파라미터, ThreadLocal 등을 사용해야 함
LIST

'Programming > 기타' 카테고리의 다른 글

Sync, Async, Blocking, Non-Blocking  (0) 2022.11.13
Redis(Remote Dictionary Server)  (0) 2022.08.17
로깅(Logging)이란?  (0) 2022.06.07
[IntelliJ ] 단축키  (0) 2021.01.19
MVC 디자인 패턴  (0) 2021.01.09