목차
개요
이번 글에선 Object Creational Pattern인 싱글톤 패턴에 대해 알아보겠습니다.
내용
요약
클래스가 하나의 객체만 가질 수 있게 하고 이 객체에 대한 글로벌한 접근을 제공하자.
예시
데이터베이스 커넥션을 생성하고 유지하는 것은 값비싼 작업입니다. 매 요청마다 혹은 객체마다 DB 커넥션을 맺으면 어떻게 될까요? 아마 꽤 많은 서버 자원을 DB 커넥션을 맺는데에만 써야 할 것입니다. 이럴 때, 한 객체에서 DB 커넥션을 맺어놓고 항상 이 객체를 통해서만 DB 요청을 하게 되면 문제가 어느정도 완화되지 않을까요?
구조
이야깃거리
언제 써야 할까?
- 오직 하나의 객체만 가져야 하는 클래스가 있고, 이 객체를 쉽게 가져올 수 있어야 할 때
장단점
- (Pros) 유일한 객체에 대한 조절되는 접근을 제공합니다. 보통 singletone 패턴을 구현할 때면 생성자를 private으로 합니다.
- (Cons) 시스템의 확장성과 테스트 용이성이 줄어들 수 있습니다.
Case Study
1. Java Runtime
모든 자바 애플리케이션은 애플리케이션이 구동 중인 환경을 알 수 있는 Runtime이라는 클래스의 단일 인스턴스를 가지고 있습니다. 자바는 이 Runtime 클래스를 싱글톤 패턴을 이용해 제공합니다.
package java.lang;
public class Runtime {
private static final Runtime currentRuntime = new Runtime();
private static Version version;
public static Runtime getRuntime() {
return currentRuntime;
}
/** Don't let anyone else instantiate this class */
private Runtime() {}
// ...
실제 Runtime 클래스의 코드를 보면 이 클래스를 따로 객체화하지 말 것을 주석으로 안내해주고 있습니다.
출처
GoF Design Patterns
'Design Patterns' 카테고리의 다른 글
[Design Patterns] Bridge (0) | 2024.03.16 |
---|---|
[Design Patterns] Adapter (0) | 2024.03.16 |
[Design Patterns] Prototype (0) | 2024.02.25 |
[Design Patterns] Factory Method (1) | 2024.01.27 |
[Design Patterns] Builder (0) | 2024.01.20 |