가자미의 개발이야기

싱글톤 패턴 Singleton Pattern 본문

Java/디자인 패턴

싱글톤 패턴 Singleton Pattern

가자미 2021. 7. 26. 20:50

싱글톤 패턴 Singleton Pattern

싱글톤 패턴은 어떤 클래스(객체)가 유일하게 1개만 존재할 때 사용.
서로 자원을 공유 할 때 주로 사용.

현실에서는 프린터를 상상해보면 이해가 된다.
여러 컴퓨터가 한 프린터를 사용하는 경우가 싱글톤 패턴에 해당한다.

기본 생성자는 private로 접근을 막고 get메소드로 간접 접근하도록 구현한다.

사용 예시

한 소켓클라이언트 객체로 두 클래스가 사용하는 예시

소켓클라이언트 클래스

package com.company.design.singleton;

public class SocketClient {
    private static SocketClient socketClient = null; //싱글톤 패턴에서는 자기 자신은 기본적으로 가지고 있어야 함

    //기본 생성자 접근을 막아야 함.
    private SocketClient(){

    }

    //static 메소드로 getInstance 메소드를 작성한다
    //이때 이 메소드는 해당 인스턴스가 없으면 새로 만들어 반환하고, 이미 있으면 있는 걸 반환하는 기능이다.
    public static SocketClient getInstance(){
        if(socketClient == null){
            socketClient = new SocketClient();
        }
        return socketClient;
    }

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

소켓클라이언트 객체를 이용하는 a 클래스

package com.company.design.singleton;

public class AClass {
    private SocketClient socketClient;

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

소켓클라이언트 객체를 이용하는 b 클래스

package com.company.design.singleton;

public class BClass {
    private SocketClient socketClient;
    public BClass(){
        this.socketClient = SocketClient.getInstance();
    }

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

main

public class Main {
    public static void main(String[] args){
        AClass aClass = new AClass();
        BClass bClass = new BClass();

        SocketClient aClient = aClass.getSocketClient();
        SocketClient bClient = bClass.getSocketClient();

        System.out.println("두 개의 객체가 같은가?");
        System.out.println(aClient.equals(bClient));
    }
}

'Java > 디자인 패턴' 카테고리의 다른 글

어댑터 패턴 Adapter pattern  (0) 2021.07.26