[디자인패턴]4.싱글턴패턴

송송승현's avatar
Nov 13, 2024
[디자인패턴]4.싱글턴패턴
💡
클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 디자인 패턴
전역 변수를 사용하지 않고도 객체를 하나만 생성하여 어디서든지 접근할 수 있도록 함

싱글턴 패턴 적용 전 코드

public class Cat { String name = "고양이"; public String getName(){ return name; } } public class Mouse { String name = "쥐"; public String getName(){ return name; } } public class Doorman { public void 쫒아내(Cat cat){ System.out.println(cat.getName()+" 쫓아내"); } } public class App { public static void main(String[] args) { Doorman doorman = new Doorman(); Cat cat = new Cat(); doorman.쫒아내(cat); } }

적용 후 코드

abstract class Animal { abstract String getName(); } public class Cat extends Animal { String name = "고양이"; public String getName(){ return name; } } public class Mouse extends Animal { String name = "쥐"; public String getName(){ return name; } } public class Doorman { static Doorman instance = new Doorman(); private Doorman() {} public void 쫒아내(Animal animal){ System.out.println(animal.getName()+" 쫓아내"); } } public class App { public static void main(String[] args) { 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.쫒아내(mouse); doorman.쫒아내(cat); } }
 

장점

  • 전역 접근 : 애플리케이션 어디에서든 동일한 인스턴스에 접근.이는 데이터 일관성을 유지하고 전역적으로 공유해야 하는 자원에 적합
  • 인스턴스 제어 : 클래스의 인스턴스를 하나만 생성하도록 제어할 수 있어, 메모리 사용을 최적화 불필요한 인스턴스 생성을 방지
  • 로딩 지연 : 초기화가 필요할 때만 인스턴스를 생성하는 방식을 통해 리소스를 효율적으로 사용

단점

  • 테스트 어려움 : 싱글턴 패턴은 전역 상태를 가지므로 단위 테스트 시 서로 간섭을 일으킬 수 있음. 테스트 환경 설정 및 초기화가 복잡해 질 수 있음
  • 의존성 문제 : 싱글턴 인스턴스에 의존하는 코드가 많아지면 결합도가 높아져 코드의 유지보수에 어려움이 생길 수 있음. 객체 간의 의존성이 증가
  • 멀티스레드 문제 : 멀티스레드 환경에서는 싱글턴 인스턴스가 올바르게 생성되도록 동기화 처리가 필요 그렇지 않으면 여러 인스턴스가 생성될 수 있음.
Share article

송승현의 블로그