싱글톤 패턴 - 서블릿 클래스당 하나의 오브젝트를 만들어두고, 사용자의 요청을 담당하는 여러 스레드에서 하나의 오브젝트를 공유해 동시에 사용한다.
싱글톤 패턴의 특징
- 클래스 밖에서 오브젝트를 사용하지 못하도록 생성자를 private으로 만든다.
- 생성된 싱글톤 오브젝트를 저장할 수 있는 자신과 같은 타입의 스태틱 필드를 정의한다.
- 스테틱 팩토리 메소드인 getInstance()를 만들고 이 메소드가 최초로 호출되는 시점에서 한번만 오브젝트가 만들어지게 한다. 생성된 오브젝트는 static field에 저장된다.
- 한번 오브젝트(싱글톤)이 만들어지고 난 후에는 스테틱 필드에 저장해 둔 오브젝트를 넘겨준다.
싱글톤 패턴의 한계
- private 생성자를 갖고 있기 때문에 상속할 수 없다.
- 상속과 다형성 같은 객체지향의 특징이 적용되지 않는 스테틱필드와 메소드를 사용한다.
- 테스트 하기가 힘들다.
엔터프라이즈 개발의 핵심은 테스트가 핵심인데 에플리케이션 코드를 싱글톤으로 만들면 테스트를 만드는데 지장이 있다.
- 서버환경에서는 싱글톤이 하나만 만들어지는 것을 보장하지 못한다.
여러대의 JVM에 분산돼서 설치가 되는 경우에도 각각 독립적으로 오브젝트가 생기기 때문에 싱글톤으로서의 가치가 떨어진다.
- 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다.
아무 객체나 자유롭게 접근하고 수정하고 공유할 수 있는 전역 상태를 갖는 것은 객체지향 프로그래밍에서는 권장되지 않는 프로그래밍 모델이다.
- 싱글톤 레지스트리
- 스프링은 서번환경에서 싱글톤이 만들어져서 서비스 오브젝트 방식으로 사용되는 것은 적극 지지한다. 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 싱글톤 레지스토리로 제공한다.
- 평범한 자바 클래스를 싱글톤으로 활용하게 해준다.
- 싱글톤과 오브젝트 상태
- 상태정보를 내부에 갖고 있지 않은 무상태(stateless) 방식으로 만들어져야 한다.
'JAVA & Open Framework' 카테고리의 다른 글
[펌] CVS sticky tag 관련 오류, is not branch 관련 오류 해결방법 (0) | 2013.01.21 |
---|---|
[펌] 자바 한글 바이트단위로 자르기 (0) | 2012.08.06 |
[펌]싱글톤 패턴(Singleton Pattern)과 싱글톤 레지스트리(Singleton Registry) (0) | 2012.07.31 |
[펌]XML 특수문자/예약문자 (0) | 2012.07.30 |
[펌] Java/자바] 숫자 여부 판단 메소드(함수); isNum, isDouble (0) | 2012.07.26 |