2024.04.19

Java 싱글톤(Singleton) 패턴

  • 딱 한개의 객체만 운영이 되게하는 시스템 -> 서버

  • 생성자를 만든다. -> private : 같은 클래스에서만 동작 -> new
  • 클래스 내부에서 new해서 private 변수에 저장해 놓는다. -> 사용하기 위한 메서드( getInstance() )를 호출해서 사용한다.

Singleton 생성

package ch06class;

public class Singleton {
	
	// private 접근 권한을 갖는 정적 필드 선언과 초기화
	private static Singleton singleton = new Singleton();
	
	// private 접근 권한을 갖는 생성자 선언
	private Singleton() {}
	
	// public 접근 권한을 갖는 정적 메소드 선언
	// static 아닌 요소들은 6번 째 줄에서 생성되어 올라간다.
	
	// Singleton 을 사용하려면 변수 선언하고 getInstance() 호출해서 사용하세요.
	// public static Singleton getSingleton() { return singleton;}
	
	public static Singleton getInstance() { return singleton;}
	
	public void print() {System.out.println("Singleton"); }
}

Singleton 사용

package ch06class;

public class SingletonExample {
	public static void main(String[] args) {
		
		/*
		 * Singleton obj1 = new Singleton(); // 컴파일 에러 
		 * Singleton obj2 = new Singleton(); // 컴파일 에러
		 */
			
		// 싱글톤 객체가 한번만 생성이된 것을 사용한다.
		Singleton obj1 = Singleton.getInstance();
		obj1.print();
		Singleton obj2 = Singleton.getInstance();
		obj2.print();
		
		System.out.println(obj1 == obj2);
		
		// 같은 주소 값이 나오게 된다.
		System.out.println(System.identityHashCode(obj1));
		System.out.println(System.identityHashCode(obj2));	
		
		// 정적 메소드를 호출해서 싱글톤 객체 얻음
//		Singleton obj1 = Singleton.getInstance();
//		Singleton obj2 = Singleton.getInstance();
		
		// 동일한 객체 참조하는지 확인
		if ( obj1 == obj2 ) {
			System.out.println("같은 Singleton 객체 입니다.");
		} else {
			System.out.println("다른 Singleton 객체 입니다.");
		}
		
	} // end of main()

} // end of class

태그:

카테고리: ,

업데이트: