inblog logo
|
DailyCoding
    Spring Boot

    13-4. 싱글톤 패턴 (Singleton Pattern)

    박은서's avatar
    박은서
    Feb 24, 2026
    13-4. 싱글톤 패턴 (Singleton Pattern)
    Contents
    1. 싱글톤 패턴 (Singleton Pattern)1️⃣ 싱글톤 패턴이란?2️⃣ 비유로 이해하기3️⃣ 싱글톤 패턴이 필요한 이유 (Why)4️⃣ 사용 시점 (When to Use)5️⃣ 싱글톤 패턴의 장단점6️⃣ 싱글톤 패턴의 구조7️⃣ 구현 방법8️⃣ 코드 예시 (Java 스타일)2. 실습 (ex04)1️⃣ 싱글톤 패턴 실습

    1. 싱글톤 패턴 (Singleton Pattern)

    1️⃣ 싱글톤 패턴이란?

    1) 개념

    프로그램 전체에서 특정 객체를 단 하나만 생성하고, 어디서든 그 동일한 객체를 사용하도록 보장하는 설계 방식

    2) 핵심 요약

    • 객체는 한 번만 생성
    • 모두가 같은 객체 공유
    • 전역 접근 가능

    2️⃣ 비유로 이해하기

    1) "회사 대표" 비유

    • 회사에는 대표가 단 1명
    • 직원들이 대표를 필요로 할 때
      • 항상 같은 대표에게 요청
      • 새로운 대표를 만들지 않음
    ➡️ 싱글톤 객체 = 회사 대표

    3️⃣ 싱글톤 패턴이 필요한 이유 (Why)

    • 일부 객체들은 여러 개 존재하면 문제가 발생
    • 예시 상황
      • 설정 관리자 → 값 충돌 발생 가능
      • 로그 기록기 → 로그 분산
      • DB 연결 관리자 → 리소스 낭비
      • 캐시 관리자 → 데이터 불일치
    ➡️ “이 객체는 하나만 있어야 한다”할 때 싱글톤 패턴 사용

    4️⃣ 사용 시점 (When to Use)

    • 다음 조건일 때 적합
      • 공용 자원 관리
      • 상태 공유 필요
      • 생성 비용이 큰 객체
      • 시스템 전체에서 하나만 필요한 객체
    • 대표 사례
      • Logger
      • Configuration Manager
      • Database Connection Manager
      • Cache Manager

    5️⃣ 싱글톤 패턴의 장단점

    1) 장점

    • 메모리 절약 → 객체 하나만 생성
    • 일관성 유지 → 동일 상태 공유
    • 전역 접근 가능 → 어디서든 사용

    2) 단점

    • 테스트 어려움 → 전역 상태 문제
    • 결합도 증가 → 의존성 커짐
    • 멀티스레드 문제 → 동시 생성 위험
    ➡️ 실무에서는 남용 금지

    6️⃣ 싱글톤 패턴의 구조

    1) 생성자

    • 외부 접근 차단 (private)

    2) 자기 자신 저장 변수

    • 객체 보관

    3) 접근 메서드

    • 객체 제공

    7️⃣ 구현 방법

    1) 동작 원리

    객체 요청 발생 ↓ 이미 객체 존재? ↓ YES → 기존 객체 반환 ↓ NO → 객체 생성 후 반환

    2) 핵심 전략

    • 생성 제한
    • 단일 인스턴스 저장
    • 접근 통로 제공

    8️⃣ 코드 예시 (Java 스타일)

    1) 코드

    class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }

    2) 의미 해석

    • private Singleton() → 외부 생성 금지
    • instance → 단 하나의 객체 저장
    • getInstance() → 객체 요청 창구

    2. 실습 (ex04)

    1️⃣ 싱글톤 패턴 실습

    1) Doorman.java

    C:\workspace\java_lab\designapp\src\ex04\Doorman.java
    package ex04; public class Doorman { // 1. 이 코드는 단 한 번만 실행된다. public static Doorman instance = new Doorman(); private Doorman() {} // 책임 public void 쫓아내(Animal a) { System.out.println(a.getName() + " 저리가"); } }

    2) App.java

    C:\workspace\java_lab\designapp\src\ex04\App.java
    package ex04; // SOLID : 객체지향원칙 (D, O) // DIP : 추상적인 것에 의존하라! -> 추상적인 것에 의존하면 자동으로 OCP가 됨 // OCP : 새로운 코드에는 OPEN, 기존 코드에는 CLOSE public class App { public static void main(String[] args) { Tiger tiger = new Tiger(); Mouse mouse = new Mouse(); Doorman doorman = Doorman.instance; // 싱글톤 Doorman doorman2 = Doorman.instance; // 싱글톤 System.out.println(doorman.hashCode()); System.out.println(doorman2.hashCode()); doorman.쫓아내(mouse); } }

    3) 결과

    notion image
     
    Share article
    Contents
    1. 싱글톤 패턴 (Singleton Pattern)1️⃣ 싱글톤 패턴이란?2️⃣ 비유로 이해하기3️⃣ 싱글톤 패턴이 필요한 이유 (Why)4️⃣ 사용 시점 (When to Use)5️⃣ 싱글톤 패턴의 장단점6️⃣ 싱글톤 패턴의 구조7️⃣ 구현 방법8️⃣ 코드 예시 (Java 스타일)2. 실습 (ex04)1️⃣ 싱글톤 패턴 실습

    DailyCoding

    RSS·Powered by Inblog