🧸 싱글턴 패턴이 뭐예요?
“단 하나만 있어야 해!” 라고 정해진 친구가 있어요.
그게 바로 싱글턴 패턴이에요.
💡 쉽게 생각해서...
싱글턴 패턴을 공용 화장실과 비유해 볼게요! 🚻
우리 회사엔 화장실이 딱 하나 있어요.
누가 먼저 들어가든,
모두 그 하나뿐인 화장실을 차례차례 써야 해요.
‼️ 각자 자기 전용 화장실을 만들면?
👉 화장실이 너무 많아져서 복잡하고, 공간도 낭비되겠죠?
그래서 회사 규칙엔 이렇게 써 있어요
“화장실은 하나만! 전 직원이 함께 씁니다!”
이게 바로 프로그래밍에서 말하는 싱글턴 패턴이에요.필요할 때마다 객체를 새로 만드는 게 아니라, 하나만 만들고 그걸 공유해서 사용하는 구조
죠!
🔧 프로그래밍에서는?
컴퓨터 프로그램에도
"이건 하나만 있으면 되고, 모두가 함께 써야 해!"
하는 친구들이 있어요.
👉 예를 들어 👈
1️⃣ 설정관리자
- 앱 전체에서 공통 설정(언어, 밝기 등)을 관리해요.
👉 여러 개가 생기면 설정이 엉킬 수 있어요!
2️⃣ 프린터 관리자
- 프린터 하나에 여러 요청이 몰리면
👉 누가 먼저 출력할지 중앙에서 조율하는 관리자가 필요해요.
3️⃣ 게임 순위표 (Leaderboard)
- 게임을 하는 모든 플레이어가
👉 같은 순위표를 보면서 플레이어들은 "내가 몇 등이구나!"를 알 수 있어요.
👩🏫 코드 예시
public class Singleton {
private static Bathroom instance; // 딱 하나 저장할 공간
private Bathroom() {
// 밖에서는 절대 못 만들어요!
}
public static Bathroom getInstance() {
if (instance == null) {
instance = new Bathroom(); // 없으면 새로 만듦
}
return instance; // 이미 있으면 그걸 사용
}
}
이제 누가 화장실 쓰고 싶으면?
Bathroom toilet = Bathroom.getInstance();
✅ 모두 같은 화장실 객체를 공유
하게 됩니다!
싱글턴의 장단점
✅ 장점
항목 | 설명 |
---|---|
하나만 생성 | 인스턴스를 하나만 만들고 재사용할 수 있어요. |
전역 접근 | 어디서든 쉽게 접근 가능 (getInstance() 등). |
지연 초기화 | 처음 사용할 때만 생성되어 자원 절약 가능. |
❌ 단점
항목 | 설명 |
---|---|
단일 책임 원칙 위반 | 객체 생성과 로직 처리를 한 클래스가 모두 맡아요. |
테스트 어려움 | 전역 상태 때문에 유닛 테스트가 까다로워요. |
멀티스레드 문제 | 동시 접근 시 인스턴스가 2개 생길 위험이 있어요. |
강한 결합 유발 | 다른 코드와 지나치게 얽혀 유연성이 떨어져요. |
🔖 정리
"싱글턴은 모두가 함께 쓰는 공유 객체예요.
아무나 새로 만들 수 없고, 항상 하나만!
그래서 모두가 그 하나를 함께 사용합니다 😊"