1. 가장 간단하게 구현하는 방법

싱글톤 패턴을 가장 단순히 구현하는 방법


App, Settings 클래스가 존재한다.

  • App이라는 클래스에서 Settings라는 클래스의 인스턴스를 얼마든지 만들 수 있다.

  • 새로 만들어진 인스턴스들은 서로 같지 않다.

public static void main(String[] args) {
    Settings settings = new Settings();
    Settings settings1 = new Settings();
    
    System.out.println(settings != settings1);
    // --> false
}
triangle-exclamation

그럼 어떻게 생성합니까?

  • java 클래스 밖에서 new를 사용하지 못하게 하려면 클래스의 private 생성자를 만들어주면 된다.

    • 오직 해당하는 클래스 안에서만 접근할 수 있는 생성자를 만들어주면 클래스 밖에서 인스턴스 생성이 불가능하다.

  • Settings 클래스 안에서 인스턴스를 만들어주는 방법을 글로벌하게 접근 가능하도록 해야한다.

    • static을 제공해줘서 접근 가능하게 만들어준다. -> private 생성자를 생성

이렇게 작성하면 getInstance()를 통해서 인스턴스를 생성할 수 있다.

하지만, getInstance()안에 new 키워드가 보인다. 이것이 문제이다.

  • 우리는 생성된 두 개의 인스턴사가 같기를 바라는데, 다르다고 출력된다.

아래는, private한 생성자와 static 메서드를 사용해서 구현하는 방법이다.

만약 instance 가 존재하지 않는다면 새로 생성하고, 그렇지 않으면 기존의 인스턴스를 반환하게 하면 몇번을 호출하더라도 같은 인스턴스가 나온다.

triangle-exclamation

애플리케이션을 만들 때, 멀티 스레드를 사용하게 되는데 멀티 스레드 환경에서 위와 같은 코드는 안전한가? 아쉽게도 안전하지 않다고 한다. 멀티 스레드에서도 안전하게 싱글톤을 만들 수 있는 방법이 존재한다고 한다.

  • 멀티 스레드 : 여러 코드가 동시에 접근할 수 있는 코드

Last updated