Singleton pattern이란?
- 어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용.
- 어플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어서 사용하는 디자인 패턴
package com.company.design.singleton;
public class SocketClient {
//외부에 제공할 자기 자신의 인스턴스
private static SocketClient socketClient=null;
//자기 자신의 인스턴스를 외부에 제공
public SocketClient() {
}
public static SocketClient getInstance(){
if(socketClient == null){
//인스턴스 생성
socketClient = new SocketClient();
}
return socketClient;
}
public void connect() {
System.out.println("connect");
}
}
AClazz 와 BClazz 에 socketClient.getInstance(); 메소드를 이용해 SocketClient 인스턴스 공통을 사용
package com.company.design.singleton;
public class AClazz {
private SocketClient socketClient;
public AClazz() {
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient(){
return this.socketClient;
}
}
package com.company.design.singleton;
public class BClazz {
private SocketClient socketClient;
public BClazz() {
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient(){
return this.socketClient;
}
}
package com.company.design;
import com.company.design.singleton.AClazz;
import com.company.design.singleton.BClazz;
import com.company.design.singleton.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));
}
}
AClazz 와 BClazz 에서
this.socketClient = new SocketClient();
로 SocketClient의 인스턴스를 생성하였다면 각각 다른 인스턴스를 생성하게 된다.