Programming/Design Pattern
👉 자바 싱글톤 패턴(Singleton) 개념과 구현 예제 – 객체 하나만 생성하는 이유와 주의점 정리
추천캐릭터
2022. 10. 29. 13:12
728x90
반응형
✔️ 싱글톤이란?
싱글톤(Singleton) 패턴은 클래스의 인스턴스를 단 하나만 생성하도록 보장하는 디자인 패턴입니다.
객체가 계속해서 생성되는 것처럼 보여도, 실제로는 최초에 생성된 하나의 인스턴스만을 반환합니다.
💡 싱글톤 구현 예제 (Lazy Initialization 방식)
public class Singletone {
private static Singletone singletone;
// 생성자를 private으로 막아 외부에서 new로 생성 불가
private Singletone() {}
public static Singletone getInstance() {
if (singletone == null) {
singletone = new Singletone();
}
return singletone;
}
}
📌 핵심 포인트:
- private static 으로 클래스 내부에 단 하나의 인스턴스를 보관
- 외부에서 new Singletone() 호출 불가능 (생성자 private)
- getInstance() 메서드를 통해서만 인스턴스에 접근 가능
- 필요할 때만 초기화하는 지연 초기화(Lazy Initialization) 방식 사용
⚠️ 싱글톤 패턴 사용 시 주의사항
- 객체를 2개 이상 생성하지 않도록 철저히 차단해야 함
- 생성자를 private으로 감춰야 함
- 상태를 유지하지 않는 Stateless 설계가 중요
- 필드를 통해 상태를 가지면 여러 사용자 간 충돌 위험
- 예: 웹 애플리케이션에서 사용자별 데이터를 필드로 저장하면 큰일 남 😱
- Spring을 사용한다면 걱정할 필요 없음
- 기본적으로 모든 Bean은 싱글톤 범위로 관리됨
- @Component, @Service, @Repository 등 사용 시 자동 적용
- 공유되지 않는 데이터는 지역 변수 또는 ThreadLocal 사용
- 예: 사용자 요청에 따른 데이터를 처리할 때는 필드 대신 메서드 파라미터 사용
🧠 결론
- 싱글톤은 자원을 절약하고, 전역적으로 동일한 인스턴스를 공유할 수 있어 유용합니다.
- 그러나 잘못 사용할 경우 상태 공유로 인한 오류 발생 가능성이 있으므로, Stateless 설계를 철저히 해야 합니다.
- Spring에서는 기본이 싱글톤이지만, 상태 관리만 잘 하면 안전하게 사용 가능!
728x90
반응형