CS 기초 이론/디자인 패턴

Singleton(싱글턴 패턴)

yoooCo 2025. 5. 14. 11:44

🧸 싱글턴 패턴이 뭐예요?

“단 하나만 있어야 해!” 라고 정해진 친구가 있어요.
그게 바로 싱글턴 패턴이에요.

💡 쉽게 생각해서...

싱글턴 패턴을 공용 화장실과 비유해 볼게요! 🚻

우리 회사엔 화장실이 딱 하나 있어요.

누가 먼저 들어가든,
모두 그 하나뿐인 화장실을 차례차례 써야 해요.

‼️ 각자 자기 전용 화장실을 만들면?

👉 화장실이 너무 많아져서 복잡하고, 공간도 낭비되겠죠?

그래서 회사 규칙엔 이렇게 써 있어요

“화장실은 하나만! 전 직원이 함께 씁니다!”

이게 바로 프로그래밍에서 말하는 싱글턴 패턴이에요.
필요할 때마다 객체를 새로 만드는 게 아니라, 하나만 만들고 그걸 공유해서 사용하는 구조죠!


🔧 프로그래밍에서는?

컴퓨터 프로그램에도

"이건 하나만 있으면 되고, 모두가 함께 써야 해!"

하는 친구들이 있어요.

👉 예를 들어 👈

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개 생길 위험이 있어요.
강한 결합 유발 다른 코드와 지나치게 얽혀 유연성이 떨어져요.

🔖 정리

"싱글턴은 모두가 함께 쓰는 공유 객체예요.
아무나 새로 만들 수 없고, 항상 하나만!
그래서 모두가 그 하나를 함께 사용합니다 😊"


📚 참고자료