2. 싱글톤 Singleton Pattern 개념 및 실습

Yeppi's 개발 일기·2022년 5월 13일
0

디자인패턴

목록 보기
2/8
post-thumbnail

1. 개념

  • 어떠한 클래스(객체)가 유일하게 1개만 존재할 때
  • 서로 자원을 공유할 때
  • ex. 현실 세계 → 프린터, 프로그래밍 → TCP Socker통신에서 서버와 연결된 connect 객체에 사용
  • instance, singleton(), getInstance()

2. 실습

singleton 객체

  • 하나의 객체만 생성하도록 기본적으로 private 로 설정
  • 참조하는 client 에서 새로운 객체로 초기화하여 사용할 경우?
    public 으로 설정
  • 자기자신의 객체를 return
// singleton 은 자기 자신을 객체로 가짐
public class SocketClient {

    private static SocketClient socketClient = null;
    private  SocketClient() { // 기본 생성자는 private 로 막기
        // AClazz, BClazz 각자 새로운 객체로 초기화하는 경우(두 객체가 동일하지 않은 경우)에는 public
    }

    // 어떤 class 라도 SocketClient 에 바로 접근 가능하도록 static
    public static SocketClient getInstance() {
        if(socketClient == null) {
            socketClient = new SocketClient();
        }
        return socketClient; // 객체 자기자신을 return
    }

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

client

  • AClazz
public class AClazz {

    private SocketClient socketClient;

    public AClazz() {
        this.socketClient = SocketClient.getInstance();
        // this.socketClient = new SocketClient(); // AClazz, BClazz 의 두 객체가 동일하지 않은 경우
    }

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

}
  • BClazz
public class BClazz {
    private SocketClient socketClient;

    public BClazz() {
        this.socketClient = SocketClient.getInstance();
        // this.socketClient = new SocketClient(); // AClazz, BClazz 의 두 객체가 동일하지 않은 경우
    }
    public SocketClient getSocketClient() {
        return this.socketClient;
    }
}

출력 결과

  • main
        AClazz aClazz = new AClazz();
        BClazz bClazz = new BClazz();
        
        SocketClient aClient = aClazz.getSocketClient();
        SocketClient bClient = bClazz.getSocketClient();
        
        // 같은 싱글톤 방식인 경우 -> ture
        // 하나의 객체를 가져야하는 싱글톤 방식이 아닌, 객체를 각각 생성하는 경우 -> false
        System.out.println("두개의 객체가 동일한가?");
        System.out.println(aClient.equals(bClient));
profile
imaginative and free developer. 백엔드 / UX / DATA / 기획에 관심있지만 고양이는 없는 예비 개발자👋

0개의 댓글