728x90
반응형
💡Singleton pattern
- 어떠한 클래스(객체)가 유일하게 1개만 존재할 때 사용한다.
- 주로 사용하는 곳
- 서로 자원을 공유할 때
- 실물 세계에선 프린터에 해당
- 프로그래밍에선 TCP Socket 통신에서 서버와 연결된 connect 객체에 주로 사용한다.
💡 싱글톤 패턴을 사용한 경우
👩🏻💻 Code
- SocketClient 의 인스턴스를 2개 생성했을 때, 생성된 2개의 객체가 같은 지 비교
- SocketClient
public class SocketClient {
private static SocketClient socketClient = null;
private SocketClient(){
//디폴트생성자인경우
}
public static SocketClient getInstance(){
if(socketClient == null){
//자신이 null이면, 자기 자신을 생성
socketClient = new SocketClient();
}
//자기자신 반환
return socketClient;
}
public void connect(){
System.out.println("connect");
}
}
- AClazz
public class AClazz {
private SocketClient socketClient;
public AClazz(){
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient(){
return this.socketClient;
}
}
- BClazz
public class BClazz {
private SocketClient socketClient;
public BClazz(){
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient(){
return this.socketClient;
}
}
- Main
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("same?");
System.out.println(aClient.equals(bClient)); // true 반환
}
}
💡 싱글톤 패턴을 사용하지 않은 경우
👩🏻💻 Code
- SocketClient 의 인스턴스를 2개 생성했을 때, 생성된 2개의 객체가 같은 지 비교
- SocketClient
public class SocketClient {
private static SocketClient socketClient = null;
public SocketClient(){
//생성자를 통해 인스턴스를 생성할 수 있게 public 으로 변경
}
public static SocketClient getInstance(){
if(socketClient == null){
//자신이 null이면, 자기 자신을 생성
socketClient = new SocketClient();
}
//자기자신 반환
return socketClient;
}
public void connect(){
System.out.println("connect");
}
}
- AClazz
public class AClazz {
private SocketClient socketClient;
public AClazz(){
//생성자를 통해 인스턴스 생성
this.socketClient = new SocketClient();
}
public SocketClient getSocketClient(){
return this.socketClient;
}
}
- BClazz
public class BClazz {
private SocketClient socketClient;
public BClazz(){
//생성자를 통해 인스턴스 생성
this.socketClient = new SocketClient();
}
public SocketClient getSocketClient(){
return this.socketClient;
}
}
- Main
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("same?");
System.out.println(aClient.equals(bClient)); // false 반환
}
}
- 이와 같이 싱글톤 패턴을 사용하면, 유일한 하나의 객체를 사용할 수 있다.
728x90
반응형
'Java' 카테고리의 다른 글
[Java] Proxy Pattern (0) | 2023.01.11 |
---|---|
[Java] Adapter pattern (0) | 2023.01.10 |
[Java] 큐(Queue) 구현 (2) | 2023.01.08 |
[Java] 스택(Stack) 구현 (0) | 2023.01.08 |
[Java] 연결 리스트(LinkedList) (0) | 2023.01.03 |