리셋 되지 말자

싱글톤 패턴(Singleton Pattern) 본문

Java(폐지)/디자인 패턴

싱글톤 패턴(Singleton Pattern)

kyeongjun-dev 2020. 8. 4. 16:45

싱글톤 패턴


싱글톤 패턴은 인스턴스를 하나만 만들어 사용하기 위한 패턴이다.
오직 하나의 인스터스만을 만들고 그것을 계속 재사용한다.
싱클톤 패턴을 적용할 경우 의미상 두 개 이상의 객체를 가질 수 없으므로 아래의 세 가지가 필요하다.

  • new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정
  • 유일한 단일 객체를 반활할 수 있는 정적 메서드가 필요
  • 유일한 단일 객체를 참조할 정ㅈ거 참조 변수가 필요

예제 코드

  • Singleton.java
package singletonPattern;

public class Singleton {
    static Singleton singletonObject; //정적 참조 변수
    private Singleton() {}; //private 생성자

    // 객체 반환 정적 메서드
    public static Singleton getInstance() {
        if(singletonObject == null) {
            singletonObject = new Singleton();
        }
        return singletonObject;
    }
}
  • Client.java
package singletonPattern;

public class Client {
    public static void main(String[] args) {
        // private 생성자이므로 new를 통해 인스턴스를 생성할 수 없다.
        // Singleton s = new Singleton();

        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        Singleton s3 = Singleton.getInstance();

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);

        s1 = null;
        s2 = null;
        s3 = null;
    }
}
  • 결과

  • T메모리

객체 참조 변수들인 singletonObject, s1, s2, s3 모두 하나의 단일 객체를 참조하는 것을 확인할 수 있다.

  • 결과

System.out.println을 통해 출력하면 참조하고 있는 객체의 toString() 메서드가 호출된다. toString() 메서드를 별도로 오버라이딩하지 않았다면 객체의 고유 값이 hashcode 를 반환하게 되는데, 호출할 때 같은 값이 출력되는 것으로 모든 참조 변수가 동일한 객체를 참조한다는 것을 의미한다.

싱글톤 패턴의 특징


  • private 생성자를 갖는다.
  • 단일 객체 참조 변수를 정적 속성으로 갖는다.
  • 단일 객체 참조 변수가 참조하는 단일 객체를 반환하는 getInstance()정적 메서드를 갖는다.
  • 단일 객체는 쓰기 가능한 속성을 갖지 않는 것이 정석이다.
Comments