ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring/디자인패턴] 싱글톤 패턴
    Framework/Spring 2021. 7. 18. 21:42



    싱글톤 패턴

    • 싱글톤 패턴은 어떠한 클래스(객체)가 유일하게 1개만 존재할 때 사용한다.
    • 이를 주로 사용하는 곳은 서로 자원을 공유할 때 사용하는데, 실물 세계에서는 프린터가 해당되며 실제 프로그래밍에서는 TCP Socket통신에서 서버와 연결된 connect객체에 주로 사용된다.

     

    싱글톤 패턴 예제

    <SocketClient>

    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!");
        }
    }
    • 싱글톤 패턴은 앞서 말했듯이 어떠한 클래스(객체)가 유일하게 하나만 존재해야할 때 사용하는 것으로, 위의 예제를 보면 기본 생성자를 private로 지정함으로써 새로운 객체를 만들지 못하도록 선언하였다.
    • 해당 객체를 생성하기 위해서는 getInstance라는 메서드를 호출해야하고, 해당 메서드는 SocketClient가 null일 경우 새로운 객체를 하나 생성하고, 아닐 경우 SocketClient를 return한다.

     

    <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("두개의 객체가 동일한가?");
            System.out.println(aClient.equals(bClient));
        }
    }
    • 결과적으로 AClazz와 BClazz모두 생성자를 통해 객체를 생성할 때 getInstance를 호출하여 생성한다. 때문에 두개의 객체는 동일하다고 나오게 된다.

    댓글

[Everything's gonna be fine]