싱글턴 패턴

JeJune Lee·2021년 11월 5일
0

디자인패턴

목록 보기
1/1
post-thumbnail

싱글턴 패턴이란?

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

코드를 통해 살펴보자

singleton 패키지 (SocketClient.java)

package com.company.design.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");
    }
}

첫 번째로 private을 통해 디폴트 생성자를 막아준다. 그 뒤 받는 값이 null이면 instance를 하나 만들어주고, 이미 존재한다면 다시 그 값을 돌려주는 것이다. 한마디로 객체는 유일하게 1개만 존재하고 그것을 static으로 같이 사용하는 것이다.

singleton 패키지 (Aclass.java)

package com.company.design.singleton;

public class AClazz {
    private SocketClient socketClient;

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

singleton 패키지 (Bclass.java)

package com.company.design.singleton;

public class BClazz {
    private SocketClient socketClient;

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

여기에 객체를 사용하려는 두 클래스가 있다. 이때 SocketClient에서 getInstance()메서드를 통해 받아오면 된다. 그러면 AClass와 BClass의 값은 동일한 값이 전달 될 것이다. 즉, 두 클래스는 같은 객체를 사용하고 있는 것 이다.

design 패키지 (Main.java)

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

    }
}

이제 Main클래스에서 두 클래스의 Instance가 동일한지 객체를 비교하는 equals을 통해 비교해보자.

두개의 객체가 동일한가?
true

true값이 나오는 것을 확인할 수 있다.

오늘은 여기까지..

오늘은 간단하게 객체를 오직 1개만 존재할 때 사용하는 디자인 패턴을 알아보았다. 디자인패턴은 구조를 구성하는데 오래 걸리지만, 객체지향에 최적화된 프로그래밍이라 좋은 설계방식인 것 같다.

profile
Being Server developer

0개의 댓글