Back-end/JavaSpringBoot

Singleton pattern

본투비곰손 2022. 8. 1. 22:10
728x90

Singleton 패턴은 어떠한 클래스가 유일하게 1개만 존재할 때 사용한다.
이를 주로 사용하는 곳은 서로 자원을 공유할 때 사용하는데 , 실물 세계에서는 공유하는 프린터를 생각하면된다.
실제 프로그래밍에서는 TCP Socket통신에서 서버와 연결된 connect객체에 주로 사용한다.

Singleton
instance
singleton()
getInstance()
package com.company.design.singlton;

public class SocketClient {

    private static SocketClient socketClient = null; // static 메소드이기때문에 변수역시 static 이어야한다.
        //null을 사용하여 초기화
    private SocketClient(){ //defualt 생성자를 private로 막아줌

    }
	//  getInstance()메소드로만 생성가능하게 해준다
    public static SocketClient getInstance() { // private 속성의 변수를 가져다 사용하기 위해 static 사용

        if(socketClient == null){
            socketClient = new SocketClient();
        } // 최초에 한번만 생성될 수 있도록 해준다.
        return socketClient;
    }

    public void connect(){
        System.out.println("connect");
    }
}
// 하나의 객체만은 생성하여 연결한다.

가져오는 객체가 동일한 객체인지 확인하기위해 A클래스를 생성

package com.company.design.singlton;

public class Aclazz {

    private SocketClient socketClient;

    public Aclazz(){ this.socketClient = SocketClient.getInstance();}

    public SocketClient getSocketClient() {
        return this.socketClient;
    }
}

B클래스를 생성

package com.company.design.singlton;

public class Bclazz {
    private SocketClient socketClient;

    public Bclazz(){
        this.socketClient = SocketClient.getInstance();
    }
    public SocketClient getSocketClient() {
        return this.socketClient;
    }
}

최종적으로 확인 하기 위한 main 클래스 작성

package com.company.design;

import com.company.design.singlton.Aclazz;
import com.company.design.singlton.Bclazz;
import com.company.design.singlton.SocketClient;

public class main {
    public static void main(String[] args) {

        Aclazz aClazz = new Aclazz();
        Bclazz bClazz = new Bclazz();

        SocketClient aClient = aClazz.getSocketClient();
        SocketClient bClient = bClazz.getSocketClient();

        System.out.println("두객체가 동일한가?");
        System.out.println(aClient.equals(bClient));
    }

}

하나의 객체를 생성(싱글톤 패턴)하였고 각각의 클래스에서 가져와서 사용했기때문에 두객체는 동일하다.

728x90