[디자인 패턴] 싱글톤 패턴

Stupefyee's avatar
Nov 13, 2024
[디자인 패턴] 싱글톤 패턴

1. 패턴 개요

  • 싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하고, 그 인스턴스를 전역적으로 공유하는 디자인 패턴.
  • 단일 인스턴스애플리케이션 전체에서 사용되도록 보장.

2. 목적

  • 하나의 인스턴스만 존재하도록 보장.
  • 자원 관리가 필요한 상황에서 효율적.
  • 전역 상태 관리객체 생성 비용 절감에 유용.

3. 특징

  • 인스턴스화: 클래스의 인스턴스는 하나만 존재.
  • 전역 접근: 어디서든지 유일한 인스턴스를 공유.
  • 지연 초기화: 인스턴스는 필요할 때만 생성.

4. 구현 코드

4.1 Doorman 싱글톤 구현

public class Doorman { // 인스턴스가 하나만 존재하도록 static 변수로 선언 private static Doorman instance; // 생성자는 private로 외부에서 직접 호출할 수 없도록 설정 private Doorman() {} // Animal 객체를 받아서 쫓아내는 메서드 public void 쫓아내(Animal animal) { System.out.println(animal.getName() + " 쫓아내"); } }

4.2 Animal 클래스 및 하위 클래스들

public abstract class Animal { public abstract String getName(); } public class Cat extends Animal { private String name = "고양이"; @Override public String getName() { return name; } } public class Mouse extends Animal { private String name = "쥐"; @Override public String getName() { return name; } }

4.3 App 클래스에서 싱글톤 사용

public class App { public static void main(String[] args) { // Doorman 인스턴스를 싱글톤 방식으로 가져옴 Doorman doorman = Doorman.instance; Doorman doorman2 = Doorman.instance; System.out.println(doorman.hashCode()); System.out.println(doorman2.hashCode()); // 여러 동물 객체 생성 Mouse mouse = new Mouse(); Cat cat = new Cat(); // Doorman 인스턴스를 통해 동물들을 쫓아냄 doorman.쫓아내(cat); // 고양이 쫓아내 doorman.쫓아내(mouse); // 쥐 쫓아내 } }

4.4 설명

  • Doorman 클래스Doorman은 싱글톤으로 구현되어, getInstance() 메서드를 통해 하나의 인스턴스만 생성되며, 애플리케이션 어디서든 그 인스턴스를 사용할 수 있습니다.
  • 쫓아내(Animal animal) 메서드는 Animal 타입 객체를 받아서 해당 동물의 이름을 출력하고 "쫓아내"라는 메시지를 출력합니다.
  • Cat과 Mouse 클래스는 Animal 클래스를 상속받아 각각 고양이와 쥐의 이름을 반환하는 getName()  메서드를 구현합니다.

4.5 출력 결과

💡
793589513 793589513 고양이 쫓아내 쥐 쫓아내
hash코드가 같은 모습

5. 장점

  • 자원 절약: 불필요한 객체 생성을 방지하고 메모리 낭비를 줄임.
  • 상태 관리: 하나의 인스턴스를 통해 전역 상태 관리가 용이.
  • 전역 접근: 애플리케이션 어디서나 동일한 인스턴스 사용.
  • 성능 최적화: 필요한 시점에만 인스턴스를 지연 초기화하거나 동기화 처리.

6. 단점

  • 테스트 어려움: 싱글톤 객체가 전역적으로 공유되어 단위 테스트의존성 주입에서 어려움 발생.
  • 유연성 부족: 유일한 인스턴스를 강제하므로 확장성이 제한될 수 있음.
  • 병렬성 문제: 멀티스레드 환경에서 동기화 문제가 발생할 수 있음.
Share article

stupefyee