Louie NRT Story

[디자인패턴] 싱글톤(Singleton) 본문

전기차충전기

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

hyeok0724.kim@gmail.com 2022. 5. 22. 17:09
반응형

작성일: 22년 5월 22일

 

Index

1. 배경

2. Setting 코드

3. FirstPage 코드

4. SecondPage 코드

5. Main 코드

6. 출력결과

 

 

1. 배경

 - 안드로이드 개발을 하다보면 1번 페이지에서 값을 변경하면 2번 페이지에서 그 값을 그대로 가져와야 하는 경우가 생김. 1번 페이지에서 객체를 생성하고 값을 설정하더라도 페이지가 사라지면서 해당 객체도 사라지기 때문에 값이 보존되지 않음. 이때 사용하는 방법이 싱글톤 패턴이라고 볼 수 있음

 - 보통은 통신쪽에서 Socket을 사용할 때 Thread 마다 Socket을 생성하고 연결하면 꼬일 수가 있기 떄문에 싱글톤 패턴을 사용함

 

 

2. Setting 코드

 - "private static Settings settings = null" 로 선언함으로써 정적변수로 만듬

 - getSettings를 통하여 정적으로 선언한 settings를 전달함으로 항상 같은 값을 보내줌

public class Settings {

    private Settings(){}
    private static Settings settings = null;

    public static Settings getSettings() {
        if (settings == null) {
            settings = new Settings();
        }
        return settings;
    }

    private boolean darkMode = false;
    private int fontSize = 13;

    public boolean getDarkMode() { return darkMode; }
    public int getFontSize() { return fontSize; }

    public void setDarkMode (boolean _darkMode) {
        darkMode = _darkMode;
    }

    public void setFontSize (int _fontSize) {
        fontSize = _fontSize;
    }
}

 

 

3. FirstPage 코드

 - getSettings()를 통하여 이미 선언된 값을 가져옴

public class firstpage {
    private Settings settings = Settings.getSettings();

    public void setAndPrintSetting() {
        settings.setDarkMode(true);
        settings.setFontSize(25);
        System.out.println("firstpage() -> " + settings.getDarkMode() + " " + settings.getFontSize());
    }
}

 

 

4. SecondPage 코드

 - getSettings()를 통하여 이미 선언된 값을 가져옴

public class secondpage {
    private Settings settings = Settings.getSettings();

    public void printSetting(){
        System.out.println("firstpage() -> " + settings.getDarkMode() + " " + settings.getFontSize());
    }
}

 

 

5. Main 코드

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new firstpage().setAndPrintSetting();
        new secondpage().printSetting();
    }
}

 

 

6. 출력결과

 - 같은 값이 출력됨을 확인함

 

Referece:

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

 

반응형
Comments