반응형
싱글톤 패턴은 프로세스 내에서 클래스 객체가 딱 하나만 만들어져야 할 때 사용하는 패턴이다.
사용자가 앱을 사용하는데 다크모드로 설정했을 경우, 다른 페이지로 이동하더라도
계속해서 다크모드로 유지되어 있어야 한다. 이 때, 설정하는 객체는 반드시 같은 것을 사용해야 한다.
그러기 위해서는 객체가 하나만 만들어지도록 해야한다.
간단하게 코드로 구현해보면 다음과 같다.
| 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 객체를 가져온다.
다크모드 설정 여부를 출력해보면 첫 번째 페이지와 동일한 것을 통해 확인해볼 수 있다.
* 참고강의
반응형