참고. Effective Java - Item 3, 4
객체가 하나의 유일한 인스턴스임이 보장되야 하는 설계에서 싱글턴 패턴은 유용하게 사용된다. 해당 싱글턴 패턴은 여러가지 방법으로 만들 수 있으며, 각각의 장단점을 지닌다.
1. Public 메서드를 이용한 싱글턴 패턴
해당 클래스가 명확히 싱글턴 객체임이 API에 드러나므로 의미상으로 명확하다는 장점을 가진다.
public class SingletonV1 {
public static final SingletonV1 INSATANCE = new SingletonV1();
}
2. 정적 메서드를 이용한 싱글턴 패턴
API의 변경없이 싱글톤으로 구현할지에 대한 결정을 변경 가능하다. 또한, 제네릭 싱글턴 팩터리로 만들 수 있다. 하지만 직렬화 / 역직렬화 시에 새로운 객체가 생겨서 싱글톤 패턴이 깨질 수 있으므로, readResolve 메서드를 추가해야 한다.
public class SingletonV2 {
private static final SingletonV2 INSTANCE = new SingletonV2();
public SingletonV2 getInstance(){
return INSTANCE;
}
private Object readResolve(){
return INSTANCE;
}
}
3. Enum을 이용한 싱글턴 패턴
유일한 인스턴스임이 보장되는 Enum 객체를 이용하여 간단하게 만들 수 있다는 장점이 있다. 다만, Enum 외에 다른 클래스를 상속해야 하는 경우에는 사용이 불가능하다.
public enum SingletonV3 {
INSTANCE;
}
유틸리티 클래스 등을 작성하기 위해 정적 메소드와 변수만을 가진 클래스를 만들고, 해당 클래스가 실제 인스턴스화 하는 것을 방지하기 위해서는 생성자를 private으로 변화시켜야 한다. 추상 클래스로 구현하는 것은 해당 클래스 자체만 방지할 뿐, 추상 클래스를 상속한 클래스를 생성하는 것을 막지 못하기 때문이다.
'자바' 카테고리의 다른 글
자바 - 불필요한 객체 생성 (0) | 2024.11.26 |
---|---|
자바 - 의존성 주입 (0) | 2024.11.26 |
자바 - 빌더 패턴 (0) | 2024.11.25 |
자바 - 정적 메소드 생성 (0) | 2024.11.25 |
자바 - 정규화 표현 문법 (0) | 2024.11.24 |
댓글