본문 바로가기
CS

CS 스터디 (Java) 6 - 싱글톤 패턴은 어떨 때 사용할까요?

by gentle-tiger 2025. 5. 15.

싱글톤(Singleton) 패턴이란? 

싱글톤(Singleton) 패턴은 어떤 클래스의 인스턴스를 오직 한 개만 생성하도록 보장하고, 모든 코드가 그 동일한 인스턴스에 접근할 수 있게 하는 설계 패턴입니다. GoF의 23가지 디자인 패턴 중 하나인 생성(Creational) 패턴으로, 전역 상태가 필요한 객체를 관리하는 방법을 제공합니다.

일반적으로 생성자를 private으로 감춰 외부에서 직접 new로 생성하지 못하게 하고, 클래스 내부에서 유일한 객체를 생성한 뒤 이를 반환하는 정적 메서드를 제공하는 방식으로 구현합니다. 이를 통해 매번 새로운 객체를 만들지 않고도 하나의 인스턴스를 공유하여 사용할 수 있습니다

 

싱글톤 패턴의 활용

백엔드 개발에서는 반복 생성 비용이 크거나 애플리케이션 전역에서 하나만 있으면 되는 객체(ex) 데이터베이스 연결 풀, 스레드 풀, 캐시, 로그 관리 객체 등)에 싱글톤 패턴을 적용해 불필요한 자원 낭비데이터 불일치 문제를 예방합니다. 싱글톤은 전체 애플리케이션에 걸쳐 단 하나의 인스턴스를 공유하도록 보장하며, Spring Framework처럼 빈(Bean)을 기본 싱글톤 스코프로 관리하는 기술 스택에서는 IoC 컨테이너가 싱글톤 레지스트리 역할을 수행해 요청마다 객체를 새로 만들지 않고도 효율적으로 전역 객체를 재사용할 수 있습니다.

 

 

싱글톤의 장점과 단점 

 

장점

- 메모리·생성 비용 절감: 애플리케이션당 한 번만 객체를 만들어 재사용

- 전역 접근성: 모든 컴포넌트가 동일 인스턴스를 공유해 설정·캐시·연결 풀 등을 일관 관리

- 자원 관리 단순화: 커넥션 풀·로거처럼 “하나만 있으면 되는” 리소스를 쉽게 관리

 

 

단점

-  테스트 어려움: 전역 고정 인스턴스라 Mock 교체나 상태 격리가 힘듦

-  높은 결합도·유연성 저하: 구체 클래스 의존도가 올라 확장·교체·DI(의존성 주입)가 어려움

-  동시성 위험: 여러 스레드가 가변 상태를 공유할 때 레이스 컨디션 발생 가능

 

 

 

결론

싱글톤 패턴은 애플리케이션 전역에서 단 하나만 존재해야 하거나 매번 생성 비용이 큰 객체(예: DB 커넥션 풀, 캐시, 로거, 스레드 풀)를 공유할 때 사용하며, 이를 통해 초기화 비용을 한 번으로 줄이고 여러 컴포넌트가 동일 자원을 일관되게 사용해 낭비와 불일치를 방지할 수 있습니다.

다만, 테스트 격리·동시성·높은 결합도 같은 단점이 있으므로 객체를 가급적 무상태로 유지하거나 Spring IoC 같은 DI 컨테이너에 생성과 수명 주기를 위임해 리스크를 최소화하는 것이 바람직합니다.