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로 호출하는 것이 아닌 각자 새롭게 객체를 만드는 방식으로 변경했다.

 

하나의 객체만 존재해야 할 때 싱글톤 패턴을 적용시켜서 구현해서 작성 할 수 있다.