반응형
싱글턴
싱글턴은 유일한 단 한개의 객체를 생성하기 위한 패턴이다.
그렇기에 단 한개라는 사실을 보증하기 위해선 private 생성자나 열거 타입을 통해 싱글턴을 만들어줘야 한다고 책은 설명하고 있다.
그런데 단 한개라는 사실을 보증해버리고 나면 단점이 존재하는데 유닛 테스트 시에 Mock 객체(가짜 객체)를 만들 수가 없을 수도 있기 떄문이다.(이미 만들어져있어서)
이러한 문제점의 해결을 위해 의존성 주입을 사용하곤 한다.
결론
사실 중요한 파트인지는 모르겠다. 스프링 개발을 하면서 싱글턴 패턴은 굉장히 개발자에게 밀접한 영역이며 상식지만 싱글턴 패턴을 실제 구현할 일은 없을 것 같다는 생각 때문이다.
그래서 싱글턴을 실제 실무에서 사용하고 있는지 찾아봤는데 그래봐야 이미 구축된 Runtime, 스프링 ApplicationContext의 getBean이었고 실제로 싱글턴을 구축하는 경우는 DAO 객체를 DB 커넥션 풀의 유일함을 보증하기 위해 싱글턴 패턴으로 만드는 경우도 있다고 한다.
다만 그것도 최근에는 유닛테스트의 어려움 때문에 안쓰는 편이 낫다고 하기도 하고 개인적인 생각에선 커넥션 풀의 여러 쓰레드 생성은 트랜잭션으로 DB의 일관성을 보장해주기 때문에 오히려 안쓰는 편이 나은거 같다고 생각이 든다.
728x90
'📘 Effective Java' 카테고리의 다른 글
[Item 6] 불필요한 객체 생성을 피하라 (0) | 2022.09.02 |
---|---|
[Item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2022.09.02 |
[Item 4] 인스턴스화를 막으려거든 private 생성자를 사용하라. (0) | 2022.09.02 |
[Item 2] 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2022.09.02 |
[Item 1] 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2022.09.02 |