JAVA/디자인 패턴
2. 싱글톤 패턴
개발자잡
2022. 6. 24. 12:29
싱글톤(Singleton) 패턴
어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용한다.
주로 사용하는 곳은 서로 자원을 공유 할 때 사용하는데, 실물 세계에서는 프린터가 해당, 실제 프로그래밍에서는 TCP Socket통신에서 서버와 연결된 connect 객체에 주로 사용한다.
코드 실습)
public class Aclass {
private SocketClient socketClient;
public Aclass(){
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;
}
}
public class SocketClient {
private static SocketClient socketClient;
private SocketClient() {
}
public static SocketClient getInstance(){
if(socketClient == null){
socketClient = new SocketClient();
}
return socketClient;
}
//getInstance로 호출 했을 때 없는 경우는 새로운 소캣을 열어줄 것이고, 있는 경우는 자신의 소캣클라이언트를 리턴할 것이다.
public void connect(){
System.out.println("connect");
}
}
public class Main {
public static void main(String[] args) {
Aclass aclass = new Aclass();
Bclazz bclazz = new Bclazz();
SocketClient aClient = aclass.getSocketClient();
SocketClient bClient = bclazz.getSocketClient();
System.out.println("두 개의 객체가 동일한가?");
System.out.println(aClient.equals(bClient));
}
}
싱글톤 패턴이 아닐 경우
this.socketClient = new SocketClient();
생성자를 public으로 풀고 getInstance로 호출하는 것이 아닌 각자 새롭게 객체를 만드는 방식으로 변경했다.
하나의 객체만 존재해야 할 때 싱글톤 패턴을 적용시켜서 구현해서 작성 할 수 있다.