Singleton Design pattern

Mia Lee·2021년 12월 29일
0

JAVA

목록 보기
82/98
package ex_static;

public class Ex4 {

	public static void main(String[] args) {

		/*
		 * 싱글톤 디자인 패턴(Singleton Design Patten)
		 * - 전체 프로그램에서 단 하나의 객체만 만들도록 보장하는 코딩 기법
		 * 
		 */
		
//		SingletonClass sc = new SingletonClass();
		// 접근제한자가 private으로 선언된 생성자로써 호출이 불가능하므로
		// SingletonClass의 인스턴스 생성이 불가능해짐!
		
		// static으로 선언된 정적 멤버변수 instance에 접근하여
		// 미리 생성되어 있는 인스턴스를 가져올 수 있다!
//		SingletonClass sc = SingletonClass.instance;
		
//		SingletonClass.instance = null;
		// => 외부에서 함부로 값을 변경할 수 없도록 private 접근제한자 적용
		
		// 외부에서 접근할 수 있도록 Getter 메서드를 제공하므로
		// Getter를 호출하여 생성된 인스턴스를 전달받아 사용할 수 있음
		// => static 메서드인 getInstance() 메서드를 호출하여 인스턴스를 리턴
		SingletonClass sc = SingletonClass.getInstance();
		
		SingletonClass sc2 = SingletonClass.getInstance();
		
		// sc / sc2 인스턴스의 주소값 확인
		System.out.println("sc 인스턴스의 주소값 : " + sc);
		System.out.println("sc2 인스턴스의 주소값 : " + sc2);
		System.out.println("sc와 sc2는 같은가? " + (sc == sc2));
		
	}

}

class SingletonClass {
	
	// 1. 생성자의 접근제한자를 private으로 선언하여
	//    외부에서 인스턴스 생성을 못하도록 제한
	private SingletonClass() {}
	
	// 2. 자신의 클래스 내에서 직접 인스턴스를 생성하여 참조 변수에 저장
	// => 이 때, 인스턴스 생성이 불가능하므로 인스턴스 변수 접근 불가능
	//    따라서, 인스턴스 생성 없이도 접근 가능하도록 static으로 선언
	//    => 외부에서 변수에 접근하여 함부로 값을 변경하지 못하도록 접근제한자를 private으로 선언
	private static SingletonClass instance = new SingletonClass();
	
	// 3. 인스턴스 생성 후 인스턴스가 저장된 멤버변수도 접근제한자로 인해 외부에서
	//    접근이 불가능하므로 대신 인스턴스를 리턴해주는 Getter 메서드 정의(Setter 불필요!)
	//    => 이 때, 인스턴스 생성 없이도 호출 가능하도록 static 으로 선언
	public static SingletonClass getInstance() {
		return instance;
	}
	
}


0개의 댓글