공부/OOP

Singleton

kkkkkdddddhhhhh 2023. 12. 13. 01:00

어떤 클래스에서 만들 수 있는 인스턴스 수를 하나로 제한 하는 패턴

다음과 같은 조건을 충족하는 객체에 적합

  1. 프로그램 실행중 최대 하나만 있어야함.
    1. 프로그램 설정, 파일 시스템 등..
  2. 이 객체에 전역적으로 접근이 가능해야함.

특징

  • private 생성자
  • static 메서드를 통해서만 객체를 얻어올 수 있음.
  • 아직 객체가 없는 경우
    • 객체를 생성한 후 static변수에 저장
    • static 변수에 저장된 객체를 반환
  • 객체가 있는 경우
    • static 변수에 저장된 객체를 반환.

예시 코드

public class Singleton{
	private static Singleton instance;

		private Singleton(){
		//private이기에 여기서 new 생성자를 하지 못함. get메서드를 통해야 생성 가능
	}
	
	public static Singleton getInstance(){
			if(instance == null){ // 싱글톤 객체가 생성되지 않고 null이라면 
					instance = new Singleton(); //스태틱 변수에 싱글톤 객체를 대입

			return instance; //객체로 생성된 싱글톤을 반환한다 
			}
			/* 이 과정에서 단 하나의 객체만 생성된다. 
			 * 새로 getInstance해도 static변수가 null이 아니기에 이미 존재하는 싱글톤 객체를 반환함
			 */
	}
}

create
delete
으로 생성,호출,삭제를 지정할 수 있음.

-----------------------------

public static Singleton ceateInstance(){
			if(instance == null){ 
					instance == new Singleton(); //싱글톤 객체의 생성만함
			}

public static Singleton getInstance(){
			return instance; // 싱글톤 객체를 반환만 함.
}

public static Singleton deleteInstance(){
			if(instance != null){
					instance = null; //싱글톤 객체가 존재한다면 싱글톤 객체를 null로 만들어버림.
			}
}


----------------------------------


public static void main(String[] args) {

        SingletonExample singletonExample = new SingletonExample();
        singletonExample.createInstance(); //생성 따로
        SingletonExample s1 =  singletonExample.getInstance(); //호출따로
        SingletonExample s2 = singletonExample.getInstance();
        System.out.println(s1 == s2); // 주소를 비교해봤더니 true 출력이 된다. 같은 객체라는뜻
        System.out.println("s1의 주소 : "+s1+" // s2의 주소 : "+s2);
        //s1의 주소 : singleton.SingletonExample@1b6d3586 // s2의 주소 : singleton.SingletonExample@1b6d3586
        singletonExample.deleteInstance();

    }

 

위와 같이 create,get,delete를 따로 지정할때의 특징

  • 사용자가 어떠한 객체를 사용 후 종료를 해야하는 경우가 있다(예를들어 시스템 설정같은 객체 등..)
  • 이럴때 객체 생성시점과 삭제 시점을 지정할 수 있다는점은 큰 이점
  • 또 명백하게 어느 시점에서 싱글톤 객체를 생성하고 호출하고 삭제하는점을 알 수 있기에

디버깅할때 문제 파악에 큰 도움이 된다.

싱글톤의 나머지 특징들….

  • 싱글톤을 생성하는 메서드만 스태틱이여야한다.
  • 나머지는 일반 메서드()

'공부 > OOP' 카테고리의 다른 글

상속  (0) 2023.12.13
Static  (0) 2023.12.13
개체 모델링 가이드라인.  (0) 2023.12.13
getter,setter  (0) 2023.12.13
OOP의 특성  (0) 2023.12.13