끄적끄적 코딩
Published 2023. 1. 31. 00:42
[Java] Singleton 디자인 패턴 Java


객체의 생성 제어와 싱글톤(Singleton) 디자인 패턴
객체의 생성을 제한해야 한다면?
- 여러 개의 객체가 필요 없는 경우
  - 객체를 구별할 필요가 없는 경우 = 수정 가능한 멤버 변수가 없고 기능만 있는 경우
  - 이런 객체를 stateless한 객체라고 함
- 객체를 계속 생성/삭제 하는데 많은 비용이 들어서 재사용이 유리한 경우

Singleton 디자인 패턴
생성자가 여러번 호출되도, 실제로 생성되는 객체는 하나이며 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환시키도록 만드는 것
(java에서는 생성자를 private으로 선언해 다른 곳에서 생성하지 못하도록 만들고, getInstance() 메소드를 통해 받아서 사용하도록 구현한다)

- 외부에서 생성자에 접근 금지 -> 생성자의 접근 제한자를 private으로 설정
- 내부에서는 private에 접근 가능하므로 직접 객체 생성 -> 멤버 변수이므로 private 설정
- 외부에서 private member에 접근 가능하나 getter 생성 -> setter는 불필요
- 객체 없이 외부에서 접근할 수 있도록 getter와 변수에 static 추가
- 외부에서는 언제나 getter를 통해서 객체를 참조하므로 하나의 객체 재사용

class SingletonClass { 
  private static SingletonClass instance = null; 
  private SingletonClass() {}

  public static SingletonClass getInstance() { 
    if(instance == null){ 
      instance = new SingletonClass(); 
    } return instance; 
  }

  public void sayHello() { 
    System.out.prinln("Hello"); 
  }

  public class SingletonTest { 
    public static void main(String[] args) { 
      SingletonClass sc1 = SingletonClass.getInstance(); 
      SingletonClass sc2 = SingletonClass.getInstance();

	  System.out.prinf("두 객체는 같은가? %b%n", sc1==sc2); 
      sc1.sayHello(); 
    } 
  }
}

*getInstance()를 사용했을때 참조하는값이 동일해야 싱글톤

검색 태그