반응형
안녕하세요 돼지왕왕돼지입니다.
오늘은 private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. 라는 내용을 함께 보고자 합니다.
이 글은 "Effective Java"의 내용을 기반으로 하였습니다.
싱글톤 ( Singleton )?
싱글톤 ( Singleton ) 은 시스템이나 어플리케이션에 정확히 하나의 인스턴스만 유지되는 클래스를 말합니다. 이런 싱글톤은 본질적으로 유일한 시스템 컴포넌트를 나타냅니다. ( ex) 윈도우 매니저, 파일 시스템 )
싱글톤을 구현하는 기본적인 방법 1.
public class Elvis{
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
}
싱글톤을 구현하는 기본적인 방법 2.
public class Elvis{
private static final Elvis INSTANCE = new Elvis();
private Elvis(){ ... }
public static Elvis getInstance(){
return INSTANCE;
}
}
- 방법 1보다 좋은 점 : 클래스에서 반환하는 싱글톤 인스턴스의 형태를 바꿀 수 있는 유연성을 제공합니다. 즉, 반드시 INSTANCE 만 반환할 필요가 없지요. 이 부분은 일반적인 팩토리 메소드의 장점을 갖는 것으로 보면 되겠습니다. ( ex) 팩토리 메소드에서는 오직 하나의 인스턴스만을 반환하지만, 각 스레드마다 하나씩 인스턴스를 반환하도록 수정 가능 )
2012/01/10 - [프로그래밍 놀이터/디자인 패턴] - [DesignPattern/Java] 생성자 대신 static factory method를 사용해보자.
2012/01/10 - [프로그래밍 놀이터/디자인 패턴] - [DesignPattern/Java] 생성자 대신 static factory method를 사용해보자.
- 단점 : 직렬화를 할 때 추가 작업이 필요합니다. Singleton class 를 serializable 로 만드려면, implements Serializable 추가하고, 싱글톤을 보장하기 위해 모든 인스턴스 필드를 transient 로 선언, readResolve method 추가해야 합니다. 아니면, deserialized 될때마다 새로운 인스턴스가 생성됩니다. ( 싱글톤이 깨진단 의미로 볼 수 있죠 )
[readResolve method]
싱글톤을 구현하는 기본적인 방법 3.
하나의 요소를 갖는 enum 타입을 만든다.
public enum Elvis{
INSTANCE;
}
- 장점 : 기본적인 방법 1와 기능적으로는 동일하지만 더 간단하다. 복잡한 직렬화나 리플렉션 상황에서도 직렬화가 자동으로 지원되고, 인스턴스가 여러 개 생기지 않도록 확실하게 보장해준다.
( 아직 널리 쓰이지는 않지만 ) 싱글톤을 구현하는 가장 좋은 방법이다.
로그인 없이 추천 가능합니다. 손가락 꾸욱~
반응형
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Design Pattern/Java] 불필요한 객체의 생성을 피하자. (0) | 2012.02.10 |
---|---|
[Design Pattern/Java] private 생성자를 사용해서 인스턴스 생성을 못하게 하자. (0) | 2012.02.10 |
[Design Pattern/Java] 생성자의 매개변수가 많을 때는 빌더(Builder) 를 고려하자. (1) | 2012.02.10 |
[DesignPattern] Design Pattern에서 성능 향상에 Critical한 Cache Management Pattern에 대해 파헤쳐 봅시다. (0) | 2012.01.23 |
[Java Design Pattern] 생성자 대신 static factory method를 사용해보자. (10) | 2012.01.10 |
댓글