package com.util;

import java.awt.image.SinglePixelPackedSampleModel;

//Singleton pattern 이 적용된 클래스
//객체 생성을 한번만 수행하고 그 이후로는 생성된 객체 공유
//singleton pattern 객체 조건

//private, static field : 필드는 static 이고 private 이여야 한다.
//생성자 private 이여야 한다. (외부에서 객체 생성이 불가능함)
//getInstance():객체를 생성해서 리턴해 주는 static method가 꼭 있어야 한다.

public class SingletonObject {

    private static SingletonObject instance; //자기 자신 타입 SingletonObject 인 필드 생성
    
    private SingletonObject() { //생성자는 private 이여야 한다 (외부에서 객체 생성이 불가능하게)
        
    }
    
    public static SingletonObject getInstance() { //객체는 getInstance() 통해서만 생성 가능하게 한다
        if(instance == null) {
            instance = new SingletonObject(); // 이미 만들어진 instance 가 없으면 객체를 생성하고
있으면 바로 return 해준다
        }
        return instance;
    }
    
    public void print() {
        System.out.println("hello, print!");
    }
    
}

생성자를 접근을 못하니까 바로 메소드를 불러서 객체를 생성한다.
package com.util;

public class SingletonObjectUser {

    public static void main(String[] args) {
        SingletonObject o1 = SingletonObject.getInstance(); //생성자를 메소드로 불러서 객체 생성
        SingletonObject o2 = SingletonObject.getInstance();
        SingletonObject o3 = SingletonObject.getInstance();
        
        o1.print();
        o2.print();
        o3.print();
        
        System.out.println(o1==o2);
        System.out.println(o3==o2);
    } 
}


+ Recent posts