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

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

싱글톤 패턴의 특징 

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

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

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

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

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

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

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

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

Posted by 아로나