어떠한 클래스(객체가) 유일하게 1개만 존재 할 경우에 사용

주로 사용되는 곳은 서로 자원을 공유 할 때 사용

ex) 프린터, TCP Socket 통신에서 서버와 연결된 connect 객체, Spring의 bean

 

Singleton
instance
singleton()
getInstance()

- 실습

 

// SocketClient.java 

package com.company.gof.singleton;

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");
    }
}

 

//A.java

package com.company.gof.singleton;

public class A {
    private SocketClient socketClient;

    public A(){
        this.socketClient = SocketClient.getInstance();
    }

    public SocketClient getSocketClient(){
        return this.socketClient;
    }
}

//B.java

package com.company.gof.singleton;

public class B {

    private SocketClient socketClient;

    public B(){
        this.socketClient = SocketClient.getInstance();
    }

    public  SocketClient getSocketClient(){
        return this.socketClient;
    }
}

 

 

//main.java

package com.company.gof;

import com.company.gof.singleton.A;
import com.company.gof.singleton.B;
import com.company.gof.singleton.SocketClient;

public class Main {

    public static void main(String[] args) {
	// write your code here
        A a = new A();
        B b = new B();

        SocketClient aClient = a.getSocketClient();
        SocketClient bClient = b.getSocketClient();

        System.out.println("두개의 객체가 동일한가?");
        System.out.println(aClient.equals(bClient));

    }
}

 

-결과

'Spring' 카테고리의 다른 글

Decorator pattern(데코레이터 패턴)  (0) 2021.04.18
Proxy pattern(프록시 패턴)  (0) 2021.04.16
Adapter pattern(어댑터 패턴)  (0) 2021.04.16
디자인 패턴  (0) 2021.04.15
POJO 클래스  (0) 2021.04.15

+ Recent posts