되자!백엔드개발자

Java(자바) - Singleton(생성자의 접근제어자) 본문

개발공부/JAVA

Java(자바) - Singleton(생성자의 접근제어자)

HyunJng 2022. 8. 11. 22:40

Singleton 클래스


생성자를 private으로 설정하여 직접 인스턴스를 생성하지 못하게 하고 public메서드를 통해 인스턴스에 접근하게 함으로써 사용할 수 있는 인스턴스의 개수를 제한하는 것.

 

Singleton클래스는 final클래스로 명시해 줄 것을 권장

이 클래스는 다른 클래스의 조상이 될 수 없다. 
상속받은 클래스의 인스턴스를 생성할 때 조상 클래스들의 생성자들이 호출되기 때문이다.

그렇기에 final로 명시해주어 더이상 상속할 수 없는 클래스라는 것을 알리는 것이 좋다.

final class Singleton{
	public static Singleton s = new Singleton();
	private Singleton() {}	// 생성자
	
	public static Singleton getSingleton() {	// 객체 생성 없이 호출해야함 
		return s;				// 무조건 static이어야한다.
	}
	
}
public class SingletonTest {
	public static void main(String[] args) {
		//Singleton a = new Singleton(); 생성자가 private이므로 에러
		Singleton a = Singleton.getSingleton();
		Singleton b = Singleton.getSingleton();
		
		if(a == b)
			System.out.println("instance는 하나만 존재");
	}
}

static 필드는 프로그램이 시작할 때 단 한번 호출되기 때문에 

getSingle()로 호출해도 항상 같은 인스턴스의 주소를 반환한다.