본문으로 바로가기

01.싱글톤 패턴

category 중요개념/디자인패턴 2022. 5. 13. 23:51
Singleton pattern이란?
- 어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용.
- 어플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어서 사용하는 디자인 패턴
package com.company.design.singleton;

public class SocketClient {
	//외부에 제공할 자기 자신의 인스턴스
    private static SocketClient socketClient=null;

	//자기 자신의 인스턴스를 외부에 제공
    public SocketClient() {

    }

    public static SocketClient getInstance(){
        if(socketClient == null){
        	//인스턴스 생성
            socketClient = new SocketClient();
        }

        return socketClient;
    }

    public void connect() {
        System.out.println("connect");
    }
}​

 

AClazz 와 BClazz 에 socketClient.getInstance(); 메소드를 이용해 SocketClient 인스턴스 공통을 사용
package com.company.design.singleton;

public class AClazz {

    private SocketClient socketClient;

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

    public SocketClient getSocketClient(){
        return  this.socketClient;
    }
}
package com.company.design.singleton;

public class BClazz {

    private SocketClient socketClient;

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

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

 

package com.company.design;

import com.company.design.singleton.AClazz;
import com.company.design.singleton.BClazz;
import com.company.design.singleton.SocketClient;

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 에서
this.socketClient = new SocketClient();
로 SocketClient의 인스턴스를 생성하였다면 각각 다른 인스턴스를 생성하게 된다.

'중요개념 > 디자인패턴' 카테고리의 다른 글

02.어댑터 패턴  (0) 2022.05.15