• 호출될 때마다 인스턴트를 새로 생성하지 않아도 된다(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
  • 정적 팩터리 메서드를 사용하면 인스턴트를 통제할 수 있다.(아래는 싱글 톤 패턴)
    1. Settings 클래스의 접근성: Settings 클래스는 **public**으로 선언되어 있어 어디에서든 접근 가능합니다.
    2. Settings 인스턴스의 생성 제한: Settings 클래스의 생성자는 **private**로 선언되어 있어, 외부에서 직접 Settings 인스턴스를 생성할 수 없습니다.
    3. Settings 인스턴스의 접근 방법: public 메소드인 **newInstance**를 통해 Settings 인스턴스에 접근할 수 있습니다. 이 메소드는 Settings 인스턴스를 반환합니다.
    4. Settings 인스턴스의 동일성 보장: newInstance 메소드는 항상 동일한 Settings 인스턴스(즉, SETTINGS)를 반환합니다. **SETTINGS**는 **final**로 선언되어 있으므로 값이 변경될 수 없습니다.
    5. 싱글턴 패턴의 구현: 위의 모든 조건으로 인해, 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

+ Recent posts