Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

개발 기록지

싱글톤 패턴 본문

자바 디자인패턴

싱글톤 패턴

hyeonw777 2021. 12. 31. 17:25

자바 싱글톤패턴이란?

어떤 클래스의 인스턴스를 오직 하나만 생성하여 글로벌하게 접근하는 방법

예를 들어 게임 환경설정 메뉴 

public class Settings {

    private static Settings instance = new Settings();

    private Settings(){ }

    public static Settings getInstance(){
        return instance;
    }
}
public class Main {

    public static void main(String[] args) {
            Settings settings1 = Settings.getInstance();
            Settings settings2 = Settings.getInstance();
            System.out.println(settings1 == settings2);
    }

}

 

 

 

싱글톤 구현 방법

  1. new를 사용해 인스턴스를 초기화하는 것을 방지하기위해 private 생성자를 사용
  2. static 메소드와 변수를 사용하여 외부에서 접근을 허용해야한다. (기본생성자를 통해 접근이 불가하기때문에)  

다양한 싱글톤 패턴구현 방법

1. Thread safe + Eager init

public class Settings {

    private static Settings instance = new Settings();

    private Settings(){ }

    public static Settings getInstance(){
        return instance;
    }
}

위 방법은 클래스가 로딩되는 시점에 바로 초기화 되기 때문에 Thread safe한 방법이다. 즉 미리 만들어 놓은 인스턴스를 반환하는 방법이다.  다만 단점은 미리 만든다라는 점이다. 만들어 놓기만하고 쓰지 않는다고하면 자원을 낭비하는 꼴이기 때문이다.

2. Thread safe + Lazy init

public class Settings {

    private static Settings instance;

    private Settings(){ }

    public static synchronized Settings getInstance(){
        if(instance == null){
            instance = new Settings();
        }
        return instance;
    }
}

위 방법은 인스턴스를 쓸 시점에 초기화하는 방법이다. Thread safe를 위해 synchronized 키워드를 사용하여 메소드를 구현한다는 점에서 성능저하를 일으킬 수 있다.

싱글톤 패턴의 문제점

  1. private 생성자를 갖고 있어 상속할 수 없다.
  2. 싱글톤은 테스트하기가 어렵다.
  3. 서버환경에서는 싱글톤이 하나만 만들어지는 것을 보장하지 못한다.
  4. 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다.
Comments