inblog logo
|
[HootJem] 개발 기록 블로그
    java

    [Java] 디자인 패턴 : 싱글톤(Singleton) 패턴

    싱글톤 패턴(Singleton Pattern)은 하나의 클래스가 오직 하나의 인스턴스만 가지며, 그 인스턴스를 어디서든지 접근할 수 있도록 하기 위한 디자인 패턴이다.
    HootJem's avatar
    HootJem
    Aug 14, 2024
    [Java] 디자인 패턴 : 싱글톤(Singleton) 패턴
    Contents
    1. 싱글톤 패턴이란?
    💡
    싱글톤 패턴(Singleton Pattern)은 하나의 클래스가 오직 하나의 인스턴스만 가지며, 그 인스턴스를 어디서든지 접근할 수 있도록 하기 위한 디자인 패턴이다. 주로 애플리케이션의 설정을 관리하거나, 로그 관리, 스레드 풀 관리 등에 사용된다.

    1. 싱글톤 패턴이란?

    싱글톤 패턴은 클래스의 인스턴스가 단 하나만 생성되도록 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접근점을 제공한다. 즉, 애플리케이션 전체에서 하나의 인스턴스를 공유할 수 있도록 하는 패턴.

    1.1 예제 1 : 기본적인 싱글톤 패턴 구현

    Doorman 클래스가 싱글톤 패턴으로 구현되었습니다. 클래스 내부에 private static으로 선언된 doorman 인스턴스가 클래스 로드 시점에 생성된다.
    public class Doorman { private static Doorman doorman = new Doorman(); private Doorman() {} // 생성자를 private으로 선언하여 외부에서 인스턴스를 생성하지 못하게 함 public static Doorman getInstance() { return doorman; // 유일한 인스턴스를 반환 } // 동물 출입 금지 public void getOut(Animal a) { System.out.println(a.getName() + " get out!"); } }
    • private 생성자: 외부에서 인스턴스를 생성할 수 없도록 private으로 선언한다.
    • static getInstance 메서드: 유일한 인스턴스를 반환하는 static 메서드로, 이를 통해 애플리케이션 어디서든지 이 인스턴스에 접근할 수 있다.
     
    public class App { public static void main(String[] args) { Doorman d1 = Doorman.getInstance(); Doorman d2 = Doorman.getInstance(); System.out.println(d1.hashCode()); // 793589513 System.out.println(d2.hashCode()); // 793589513 } }
    실행결과 주소가 같다. 동일한 인스턴스를 참조하고 있음을 의미한다.
     

    1.2 예제 2 : 간단한 싱글톤 패턴 구현

    좀 더 간단하게 싱글톤 패턴을 구현합니다. instance 필드를 public으로 선언하여 직접 접근할 수 있도록 한다.
    public class Doorman { public static Doorman instance = new Doorman(); private Doorman(){} // 동물 출입 금지 public void getOut(Animal a){ System.out.println(a.getName()+"getOut!"); } }
     
    public class App { public static void main(String[] args) { Doorman d1 = Doorman.instance; Doorman d2 = Doorman.instance; System.out.println(d1.hashCode()); // 793589513 System.out.println(d2.hashCode()); // 793589513 } }
     

    1.3 싱글톤 패턴의 장점

    • 전역적인 접근성: 싱글톤 인스턴스는 어디서든 접근할 수 있다.
    • 메모리 절약: 인스턴스가 하나만 생성되므로 메모리 낭비를 줄일 수 있다.
    • 데이터 일관성: 애플리케이션 전체에서 동일한 인스턴스를 사용하므로, 데이터의 일관성을 유지할 수 있다.

    1.4 싱글톤 패턴의 단점

    • 멀티스레드 환경에서의 문제: 기본적인 싱글톤 패턴은 멀티스레드 환경에서 안전하지 않을 수 있다. 동시에 인스턴스를 생성하려고 할 때, 두 개 이상의 인스턴스가 생성될 가능성이 있다. 이를 해결하려면 synchronized 키워드 등을 사용하여 스레드 안전성을 확보해야 한다.
    • 테스트의 어려움: 싱글톤 패턴은 전역 상태를 가지기 때문에, 단위 테스트에서 모킹(mocking)이 어려울 수 있다.
     

    결론

    싱글톤 패턴은 유용하지만, 멀티스레드 환경에서의 사용이나 테스트 가능성에 대한 고려가 필요하다. 필요한 상황에서 신중하게 적용해야 하며, 특히 멀티스레드 환경에서는 추가적인 안전 장치를 마련하는 것이 중요함!
    Share article
    Contents
    1. 싱글톤 패턴이란?

    [HootJem] 개발 기록 블로그

    RSS·Powered by Inblog