- 호출될 때마다 인스턴트를 새로 생성하지 않아도 된다(Boolean.valueOf)
- 기본 생성자로 객체를 생성하면 매번 새로운 인스턴트가 생성된다.
package org.example;
public class Settings {
private boolean useAutoSteering;
private boolean useABS;
private Difficulty difficulty;
public static void main(String[] args) {
System.out.println(new Settings());
System.out.println(new Settings());
System.out.println(new Settings());
}
}
---------------------------------------------------------
org.example.Settings@1b6d3586
org.example.Settings@4554617c
org.example.Settings@74a14482
Process finished with exit code 0
- 정적 팩터리 메서드를 사용하면 인스턴트를 통제할 수 있다.(아래는 싱글 톤 패턴)
- Settings 클래스의 접근성: Settings 클래스는 **public**으로 선언되어 있어 어디에서든 접근 가능합니다.
- Settings 인스턴스의 생성 제한: Settings 클래스의 생성자는 **private**로 선언되어 있어, 외부에서 직접 Settings 인스턴스를 생성할 수 없습니다.
- Settings 인스턴스의 접근 방법: public 메소드인 **newInstance**를 통해 Settings 인스턴스에 접근할 수 있습니다. 이 메소드는 Settings 인스턴스를 반환합니다.
- Settings 인스턴스의 동일성 보장: newInstance 메소드는 항상 동일한 Settings 인스턴스(즉, SETTINGS)를 반환합니다. **SETTINGS**는 **final**로 선언되어 있으므로 값이 변경될 수 없습니다.
- 싱글턴 패턴의 구현: 위의 모든 조건으로 인해, Settings 클래스의 인스턴스는 항상 하나만 존재하게 됩니다. 이는 싱글턴 디자인 패턴을 구현한 것입니다.
package org.example;
public class Settings {
// 클래스 내부에서만 접근 가능한 필드들
private boolean useAutoSteering;
private boolean useABS;
private Difficulty difficulty;
// private 생성자 - 외부에서 이 클래스의 인스턴스를 직접 생성하지 못하게 합니다.
private Settings(){}
// 'Settings'의 유일한 인스턴스를 저장하는 필드
// final로 선언되어 값이 변경되지 않도록 하였습니다.
private static final Settings SETTINGS = new Settings();
// 'Settings' 인스턴스를 반환하는 public 메소드
// 이 메소드를 통해 외부에서 'Settings' 인스턴스에 접근할 수 있습니다.
// 항상 동일한 인스턴스를 반환하므로, 'Settings' 인스턴스는 항상 하나만 존재하게 됩니다.
public static Settings newInstance(){
return SETTINGS;
}
}
---------------------------------------------------------
Settings settings1 =Settings.newInstance();
Settings settings2 =Settings.newInstance();
System.out.println("settings1 = " + settings1);
System.out.println("settings2 = " + settings2);
---------------------------------------------------------
settings1 = org.example.Settings@1b6d3586
settings2 = org.example.Settings@1b6d3586
Process finished with exit code 0