객체의 생성을 제한해야 한다면?
- 여러개의 객체가 필요 없는 경우
- 객체를 구별할 필요가 없는 경우 = 수정 가능한 멤버 변수가 없고 기능만 있는 경우
- 이런 객체를 stateless 한 객체라고 한다.
- 객체를 계속 생성/삭제 하는데 많은 비용이 들어서 재사용이 유리한 경우
Singleton 디자인 패턴
- 외부에서 생성자에 접근 금지 -> 생성자의 접근 제한자를 private로 설정
- 내부에서는 private에 접근 가능하므로 직접 객체 생성 -> 멤버 변수이므로 private 설정
- 외부에서 private member에 접근 가능한 getter 생성 -> setter는 불필요
- 객체 없이 외부에서 접근할 수 있도록 getter와 변수에 static 추가
외부에서는 언제나 getter를 통해서 객체를 참조하므로 하나의 객체 재사용
Singelton 패턴 예시
// stateless 한 클래스 (상태를 가지지 않는 클래스)
class SingletonClass{
// Singleton Pattern : 객체의 생성이 1개로 제한이 되어야 한다.
private static SingletonClass sClass = new SingletonClass();
// 다른 클래스에서 객체를 생성하지 못하게 한다.
private SingletonClass() {}
public static SingletonClass getSingleTonClass() {
// static에서 non-static한것을 접근하지 못하므로 sClass도 static으로 선언한다.
return sClass;
}
public void sayHello() {
System.out.println("Hello");
}
}
public class SingletonTest {
public static void main(String[] args) {
SingletonClass sClass = SingletonClass.getSingleTonClass();
sClass.sayHello();
SingletonClass sClass2 = SingletonClass.getSingleTonClass();
sClass2.sayHello();
System.out.println(sClass == sClass2);
}
}
'Java' 카테고리의 다른 글
[Java] Collection Framework (0) | 2022.07.26 |
---|---|
[Java] 접근제한자 (0) | 2022.07.22 |
[Java] 다형성(Polymorphism) (0) | 2022.07.21 |
[Java] 메서드 재정의 (0) | 2022.07.21 |
[Java] 상속 (0) | 2022.07.21 |