2009. 9. 18. 14:52
Programming/Design Pattern
Singleton Pattern
싱글턴 패턴
해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근 할 수 있도록 하기 위한 패턴.
■ 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만든다. 그리고 다른 어떤 클래스에서도 자신의 인스턴스를 차가로 만들지 못하도록 해야 한다. 인스턴스가 필요하면 반드시 클래스 자신을 거치도록 해야된다.
■ 그리고 어디서든 그 인스턴스에 접근할 수 있도록 만든다. 다른 객체에서 이 인스턴스가 필요하면 언제든지 클래스한테 요청을 할 수 있게 만들고, 요청이 들어오면 그 하나뿐인 인스턴스를 건네주도록 만들어야 한다.
■ 자바에서 싱글턴 패턴을 구현할 때는 private 생성자와 정적 메소드, 정적 변수를 사용.
■ 다중 스레드를 사용하는 애플리케이션에서는 속도와 자원 문제를 파악해보고 적절한 구현법을 사용해야 한다.
적용 영역
■ 특정 클래스에 대해 클라이언트에게 잘 알려진 유일한 인스턴스가 요구될 때
■ 클라이언트가 특정 클래스의 유일한 인스턴스의 수정 없이 이를 상속한 클래스의 인스턴스를 사용할 때
구조

적용 결과
■ Singleton 클래스는 유일한 인스턴스를 캡슐화한다. 이로써 인스턴스에 대한 접근 방법과 접근 시점에 대한 통제가 가능하다.
■ Singleton은 전역 변수(Global variable)에 대한 개선책이다. Singleton을 사용하면 전역 변수 사용시에 발생할 수 있는 네임스페이스 충돌[1]을 막을 수 있다. 즉, 네임 스페이스 낭비를 막는다.
■ 상속을 통해 구조나 행위들을 수정할 수 있다.
■ 유일한 인스턴스의 사용 대신에 특정한 숫자의 인스턴스를 사용하도록 수정이 가능하다.
■ 언어에 따라 제약 사항을 갖게 되는 클래스 오퍼레이션(class operation)보다 유연성을 갖는다. 가령, Singleton은 하나 이상의 인스턴스 생성이 가능하다.
■ 자바에서 정적 메소드(static method)를 갖는 클래스와 Singleton 클래스를 비교하면, Singleton을 사용하는 경우 명확한 객체 지향 설계가 가능한 반면, 정적 메소드를 사용하는 클래스는 단순한 기능 목록이 될 우려가 있다.
■ 복수의 VM이 사용되는 경우 각각의 VM마다 Singleton 인스턴스가 생성되기 때문에 분산 어플리케이션은 이를 유의해야 한다.
■ 복수의 클래스 로더가 쓰이는 경우 동일한 이름을 갖는 각각의 Singleton 인스턴스가 생성되기 때문에 네임스페이스를 구분해야 한다.
■ 참조되지 않는 Singleton 인스턴스는 가비지 콜렉션(garbage collection)에 의해서 파괴되고, 재생성 될 수 있다. 이때는 새롭게 초기화가 수행되는 점을 유의해야 한다.
- 이 종 화 (ingenuity.egloos.com) -