Java

[Java] 싱글턴(Singleton) 디자인 패턴

sujin7837 2022. 2. 20. 17:51
반응형

싱글턴(Singleton) 디자인 패턴

객체의 생성 제어

객체를 계속 생성/삭제하는데 많은 비용이 들어서 재사용이 유리한 경우, 혹은 여러 개의 객체가 필요없는 경우에는 객체의 생성을 제한하는 것이 좋습니다. 여러 개의 객체가 필요없는 경우는 수정 가능한 멤버 변수가 없고 기능만 있어서 객체를 구별할 필요가 없는 경우, 그리고 객체가 가진 고유한 특징 없이 동작만 중요한 경우(stateless)가 존재합니다.

 

싱글턴(Singleton) 생성 방법

1) 생성자의 접근 제한자를 private으로 설정하여 외부에서 생성자에 접근할 수 없도록 합니다.

2) 내부에서는 private에 접근 가능하므로 직접 객체를 생성하는데, 멤버 변수이므로 접근 제한자는 private으로 설정합니다.

3) 외부에서 private member에 접근 가능한 getter를 생성합니다. (setter는 불필요)

4) 객체 없이도 외부에서 접근 가능하도록 getter와 멤버 변수에 static을 추가합니다.

5) 외부에서는 언제나 getter를 통해서 객체를 참조하므로 하나의 객체를 재사용합니다.

// SinglePerson.java
public class SinglePerson {
	private SinglePerson() {};	// 1)
	
	private static SinglePerson sp=new SinglePerson();	// 2), 4)
	
	public static SinglePerson getPerson() {	// 3), 4)
		return sp;
	}
	
	void laugh() {
		System.out.println("haha");
	}
}
// SinglePersonTest.java
public class SinglePersonTest {

	public static void main(String[] args) {
		SinglePerson sp1=SinglePerson.getPerson();
		SinglePerson sp2=SinglePerson.getPerson();
		
		System.out.println(sp1.equals(sp2));
		sp1.laugh();
		sp2.laugh();
	}
}
// 결과 화면
true
haha
haha

하나의 객체만 생성 가능하므로, sp1과 sp2는 같은 객체입니다.

반응형