SingletonContainer
싱글톤 패턴이란?
싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되도록 보장하는 디자인 패턴입니다.
싱글톤 패턴의 장점
메모리 효율성: 하나의 인스턴스만 생성하므로 메모리 사용량 감소
일관성: 모든 클라이언트가 동일한 인스턴스를 공유하므로 일관된 상태 유지
전역 접근: 어디서든 동일한 인스턴스에 접근 가능
싱글톤 패턴의 단점
테스트의 어려움: 전역 상태를 공유하므로 테스트 시 격리가 어려움
유연성 저하: 싱글톤 클래스는 상속이 어려움
동시성 문제: 멀티스레드 환경에서 동시성 처리가 필요
스프링의 싱글톤 컨테이너
스프링은 싱글톤 패턴을 컨테이너 레벨에서 제공합니다. 이를 통해 개발자가 직접 싱글톤 패턴을 구현할 필요 없이 스프링이 관리해줍니다.
스프링 싱글톤의 특징
스프링 컨테이너가 싱글톤을 관리
스프링 컨테이너는 빈을 생성하고 관리하는 역할
기본적으로 모든 빈은 싱글톤으로 생성됨
스프링의 싱글톤은 스레드 안전
스프링은 빈의 생명주기를 관리하며 스레드 안전성 보장
동시성 문제를 자동으로 처리
설정 변경이 용이
@Scope("singleton")
또는@Scope("prototype")
으로 스코프 변경 가능기본값은 singleton
예시 코드
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
위 코드에서 UserService
는 스프링 컨테이너에 의해 싱글톤으로 관리됩니다.
스프링 싱글톤의 장점
자동 관리
개발자가 직접 싱글톤 패턴을 구현할 필요 없음
스프링이 자동으로 인스턴스 관리
테스트 용이성
스프링의 DI를 통해 테스트 시 모의 객체 주입 가능
테스트 격리가 용이
유연한 설정
필요에 따라 스코프 변경 가능
다양한 빈 설정 옵션 제공
주의사항
상태 관리
싱글톤 빈은 상태를 가질 경우 주의 필요
상태가 없는 무상태(stateless)로 설계하는 것이 좋음
의존성 주입
생성자 주입을 권장
순환 참조 주의
리소스 관리
공유 리소스 사용 시 동시성 처리 필요
적절한 락킹 메커니즘 사용
Last updated