1. 개념
- 어떠한 클래스(객체)가 유일하게 1개만 존재할 때
- 서로 자원을 공유할 때
- ex. 현실 세계 → 프린터, 프로그래밍 → TCP Socker통신에서 서버와 연결된 connect 객체에 사용
instance
, singleton()
, getInstance()
2. 실습
singleton 객체
- 하나의 객체만 생성하도록 기본적으로
private
로 설정
- 참조하는 client 에서 새로운 객체로 초기화하여 사용할 경우?
public
으로 설정
- 자기자신의 객체를
return
public class SocketClient {
private static SocketClient socketClient = null;
private SocketClient() {
}
public static SocketClient getInstance() {
if(socketClient == null) {
socketClient = new SocketClient();
}
return socketClient;
}
public void connect() {
System.out.println("connect");
}
}
client
public class AClazz {
private SocketClient socketClient;
public AClazz() {
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient() {
return this.socketClient;
}
}
public class BClazz {
private SocketClient socketClient;
public BClazz() {
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient() {
return this.socketClient;
}
}
출력 결과
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));