본문 바로가기

Java

[ Java ] 객체지향 디자인 패턴 - 싱글톤 패턴(singleton pattern)

반응형

싱글톤 패턴은 프로세스 내에서 클래스 객체가 딱 하나만 만들어져야 할 때 사용하는 패턴이다.

사용자가 앱을 사용하는데 다크모드로 설정했을 경우, 다른 페이지로 이동하더라도
계속해서 다크모드로 유지되어 있어야 한다. 이 때, 설정하는 객체는 반드시 같은 것을 사용해야 한다.
그러기 위해서는 객체가 하나만 만들어지도록 해야한다.

간단하게 코드로 구현해보면 다음과 같다.

 

| Settings.java

public class Settings {
    private Settings() {} // default 객체 생성 불가능하도록 설정
    private static Settings settings = null; 
    
    // Point !!
    public static Settings getInstance() {
        if(settings == null) {
            settings = new Settings();
        }
        return settings;
    }

    private boolean darkMode = false;
    public boolean isDarkMode() {
        return this.darkMode;
    }
    public void setDarkMode(boolean _darkMode) {
        this.darkMode = _darkMode;
    }
}


static 으로 선언된 것(정적요소)은 해당객체가 얼마나 만들어지든지 간에 
메모리에 지정된 부분에 딱 하나만 존재하게 된다.
컴파일 할 때부터 이 요소가 차지할 메모리 용량이 정해져 있는 것이다.

| FirstPage.java

public class FirstPage {
    private Settings settings = Settings.getInstance();

    public FirstPage() {
        setSettings();
    }
    
    public void setSettings() {
        settings.setDarkMode(true);
        printSettings();
    }

    public void printSettings() {
        System.out.println("==Fisrt Page==");
        System.out.println("DarkMode: " + settings.isDarkMode());
    }
}

 

| SecondPage.java

public class SecondPage {
    private Settings settings = Settings.getInstance();

    public void printSettings() {
        System.out.println("==Second Page==");
        System.out.println("DarkMode: " + settings.isDarkMode());
    }
}

 

첫 번째 페이지에서 설정 인스턴스 값을 가져온다.

Settings클래스에서 settings의 값이 null인 상태이기 때문에 새로운 인스턴스를 생성하여 반환한다.

그런 다음 다크모드로 설정한다.

 

두 번째 페이지에서 설정 인스턴스는 이미 생성된 settings 객체를 가져온다.

다크모드 설정 여부를 출력해보면 첫 번째 페이지와 동일한 것을 통해 확인해볼 수 있다.

 

 

 

* 참고강의

https://www.youtube.com/watch?v=lJES5TQTTWE

반응형