토비의 스프링 3.1 - 싱글톤, 싱글톤 패턴

2017. 12. 21. 17:36프로그래밍 언어/Spring Framework

토비의 스프링 3.1 - 싱글톤, 싱글톤 패턴


◈ 자바에서의 싱글톤 패턴

* 클래스 밖에서는 오브젝트를 생성하지 못하도록 생성자를 private으로 만든다.

* 스태틱 팩토리 메소드인 getInstance()를 만들고 이 메소드가 최초로 호출되는 시점에서 한번만 오브젝트가 만들어지게 한다.

* 한번 오브젝트(싱글톤)이 만들어지고 난 후에는 getInstance()메소드를 통해 이미 만들어져 스태틱 필드에 저장해둔 오브젝트를 넘겨준다.


- 싱글톤 패던을 적용한 UserDao-

1
2
3
4
5
6
7
8
9
10
public class UserDao { 
    private static UserDao INSTANCE; 
    private UserDao(ConnectionMaker connectionMaker) { 
        this.connectionMaker = connectionMaker; 
    }
    public static synchronized UserDao getlnstance() { 
        if (INSTANCE == null) INSTANCE = new UserDao(???); 
        return INSTANCE; 
    }    
}
cs


◈ 싱글톤 패턴의 한계
1. private 생성자를 갖고 있기 떄문에 상속할 수 없다.

싱글톤 패던은 생성자를 private으로 제한하기 때문에 자신만이 자시 오브젝트를 만들도록 제한하는 것이다.

객체지향의 장점인 상속과 다형성을 적용할 수 없다.


2. 싱글톤은 테스트하기가 힘들다

만들어지는 방식이 제한적이기 때문에 테스트에서 사용될 때 목 오브젝트 등으로 대체하기가 힘들다.

테스트는 엔터프라이즈 개발의 핵심인데 애플리케이션 코드를 싱글톤으로 만들면 테스트 만드는데 지장이 있는건 큰 단점이다.


3. 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직 하지 못하다.

싱글톤은 사용하는 클라이언트가 정해져 있지 않다. 싱글톤의 스태틱 메소드를 이용해 언제든지 싱글톤에 쉽게 접근할 수 있기 때문에 자연스럽게 전역상태(global state)로 사용되기 쉽다.






◈ 참조

◈ 오브젝트의 동일성과 동등성의 차이

두 개의 오브젝트가 완전히 같은 

동일한(identical) 오브젝트라고 말하는 것 = 동일성(==)

동일한 정보를 담고 있는(equivalent) 오브젝트라고 말하는 것 = 동등성(equals() 메소드)





☞ 오타, 지적 환영합니다.

☞ 키워드 : 자바 오브젝트, 동일성과 동등성, 싱글톤, 싱글톤 패턴의 단점, 스코프, 스프링 빈의 스코프