『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다.
싱글톤 패턴이란?
"오직 하나의 인스턴스만 사용하게 하는 패턴"입니다.
왜 이런 패턴이 필요할까요?
- 프로그램 실행 중에 동일한 객체가 계속 여러 개 생성되면 안 되는 경우가 있습니다.
- 예를 들어, 설정을 관리하는 객체, 로그를 기록하는 객체, 데이터베이스 연결 객체 등은 하나만 존재해야 일관성 유지와 자원 절약이 가능합니다.
주요 특징
- 생성자를 private으로 만든다
→ 외부에서 new Singleton()으로 인스턴스를 만들지 못하게 막습니다. - 클래스 내부에 static 참조변수를 둔다
→ 인스턴스를 클래스 내부에서 딱 하나만 만들어두고 공유합니다. - getInstance()라는 정적 메서드로 인스턴스를 제공한다
→ 외부에서 이 메서드를 통해 단 하나의 객체만 얻을 수 있습니다.
코드
public class Singleton {
static Singleton singletonObject; // 클래스가 공유하는 정적 참조 변수
private Singleton() { } // 생성자를 private으로 막음
public static Singleton getInstance() {
if (singletonObject == null) {
singletonObject = new Singleton(); // 한 번만 생성
}
return singletonObject; // 이후에는 계속 이 객체만 반환
}
}
실행 흐름 예시
Singleton a = Singleton.getInstance();
Singleton b = Singleton.getInstance();
System.out.println(a == b); // true (같은 객체)
이렇게 하면 a와 b는 같은 인스턴스를 참조하게 되어, 어떤 상황에서도 객체가 하나만 존재합니다.
"유일한 인스턴스를, 꼭 정해놓은 하나만 사용하게 하는 패턴"
클래스 다이어그램 요약
- Client가 직접 new Singleton()으로 만들지 못하고,
- getInstance()를 통해 내부적으로 만들어진 단 하나의 객체만 사용합니다.
- 객체는 클래스의 static 필드에 저장되어 재사용됩니다.
싱글톤 패턴의 장점
일관성 유지 | 동일한 객체를 사용하므로 상태가 일치 |
메모리 절약 | 하나만 만들기 때문에 불필요한 생성 X |
전역 접근 | 어디서든 같은 객체를 공유 |
주의할 점
- 멀티스레드 환경에서는 synchronized 처리를 하지 않으면 동시에 두 개 생성될 위험이 있습니다.
- 이런 경우는 더 안전한 버전인 Double-checked locking, enum Singleton, Holder 패턴 등을 사용합니다.
'Spring > 스프링입문을 위한 자바객체지향의 원리와 이해' 카테고리의 다른 글
팩터리 메서드 패턴(Factory Method Pattern) (0) | 2025.07.03 |
---|---|
템플릿 메서드 패턴(Template Method Pattern) (0) | 2025.07.03 |
테코레이터 패턴(Decorator Pattern) (0) | 2025.07.03 |
프록시 패턴(Proxy Pattern) (0) | 2025.07.03 |
어댑터 패턴(Adapter Pattern) (0) | 2025.07.03 |