하나의 클래스에 대해 단 하나의 객체만 생성되도록 보장하는 디자인 패턴을 말한다.
→ ❗객체가 여러 개 생성되지 않고, 하나만 생성되어 공유되는 방식을 말한다.❗
⭕ 장점
메모리 절약 → 객체를 여러 개 만들지 않음
일관된 상태 유지 → 하나의 객체를 공유
자원 관리 용이 → DB 커넥션 풀, 설정 클래스 등에 적합
❌ 단점
멀티스레드 환경에서 동기화 이슈 → synchronized 처리가 필요할 수 있음
의존성이 강해짐 → 테스트가 어려워질 수도 있음
객체가 언제 해제될지 예측하기 어려움 → 관리 주의 필요
스프링 프레임워크에서는 기본적으로 모든 빈(Bean)이 싱글톤 패턴으로 관리된다.
→ @Component, @Service, @Repository 등의 빈은 기본적으로 싱글톤!
→ ❗스프링에서는 기본적으로 빈(Bean)을 싱글톤으로 관리하므로 따로 구현할 필요가 없다.❗