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