JAVA & Open Framework2012. 7. 31. 13:52

싱글톤 패턴 - 서블릿 클래스당 하나의 오브젝트를 만들어두고, 사용자의 요청을 담당하는 여러 스레드에서 하나의 오브젝트를 공유해 동시에 사용한다.

싱글톤 패턴의 특징 

- 클래스 밖에서 오브젝트를 사용하지 못하도록 생성자를 private으로 만든다.
- 생성된 싱글톤 오브젝트를 저장할 수 있는 자신과 같은 타입의 스태틱 필드를 정의한다.
- 스테틱 팩토리 메소드인 getInstance()를 만들고 이 메소드가 최초로 호출되는 시점에서 한번만 오브젝트가 만들어지게 한다. 생성된 오브젝트는 static field에 저장된다.
- 한번 오브젝트(싱글톤)이 만들어지고 난 후에는 스테틱 필드에 저장해 둔 오브젝트를 넘겨준다.

싱글톤 패턴의 한계
- private 생성자를 갖고 있기 때문에 상속할 수 없다.
- 상속과 다형성 같은 객체지향의 특징이 적용되지 않는 스테틱필드와 메소드를 사용한다.

- 테스트 하기가 힘들다.
  엔터프라이즈 개발의 핵심은 테스트가 핵심인데 에플리케이션 코드를 싱글톤으로 만들면 테스트를 만드는데 지장이 있다.

- 서버환경에서는 싱글톤이 하나만 만들어지는 것을 보장하지 못한다.
  여러대의 JVM에 분산돼서 설치가 되는 경우에도 각각 독립적으로 오브젝트가 생기기 때문에 싱글톤으로서의 가치가 떨어진다.

- 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다.
   아무 객체나 자유롭게 접근하고 수정하고 공유할 수 있는 전역 상태를 갖는 것은 객체지향 프로그래밍에서는 권장되지 않는 프로그래밍 모델이다.

- 싱글톤 레지스트리
   - 스프링은 서번환경에서 싱글톤이 만들어져서 서비스 오브젝트 방식으로 사용되는 것은 적극 지지한다. 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 싱글톤 레지스토리로 제공한다.
    - 평범한 자바 클래스를 싱글톤으로 활용하게 해준다.

- 싱글톤과 오브젝트 상태
   - 상태정보를 내부에 갖고 있지 않은 무상태(stateless) 방식으로 만들어져야 한다.

출처 : http://peacekirf.tistory.com/28

Posted by 아로나
JAVA & Open Framework2012. 7. 31. 13:49

@ singleton - 하나씩 일어나는 일[것], 홀로인 것, 독자(獨子), (카드 놀이의) 한 장 패(의 수)


@ 싱글톤 패턴(Singleton Pattern) : 어떤 클래스를 애플리케이션 내에서 제한된 인스턴스 개수, 이름처럼 주로 하나만 존재하도록 강제하는 패턴

@ 싱글톤 패턴의 한계
- private 생성자를 갖고 있기 때문에 상속할 수 없다. 
- 싱글톤은 테스트하기 힘들다. 만들어지는 방식이 제한적이기에 테스트도 힘들다.
- 서버환경에서는 싱글톤이 하나만 만들어지는 것을 보장하지 못한다.(ex. 분산환경)
- 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다.

@ 싱글톤 레지스트리(Singleton Registry)
: 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공. 평범한 자바 클래스를 싱글톤으로 활용하게 해주므로 싱글톤 패턴이 지니고 있는 한계점들이 문제가 되지 않는다.

 출처 : http://priceless.tistory.com/292

Posted by 아로나