싱글톤 패턴은 어떠한 클래스(객체)가 유일하게 1개만 존재할 때 사용한다.
주로, 서로 자원을 공유할 때 사용하는데 실제 현생으로 따지자면? 프린터가 해당되며
실제 프로그래밍에서는 TCP socket 통신에서 서버와 연결된 connect 객체에 주로 사용한다.
싱글톤 패턴을 생성하기 위해서 방법은 간단하다.
default 생성자를 private로 막아버리고, getInstance()로만 해당 객체를 사용할 수 있도록 하면된다.
코드를 예시로 보자.
싱글톤 패턴을 이용하여 SocketClient 라는 class 를 예시로 생성해보자.
값이 없을 경우에만 딱 한번 생성되며, 어떤 클래스에서 사용하 건 같은 객체가 사용된다.
public class SocketClient {
//null 로 초기화
private static SocketClient socketClient = null;
//default 생성자를 private 으로 선언
private SocketClient(){}
public static SocketClient getInstance(){
// 값이 null 일 경우에만 생성
if(socketClient == null){
socketClient = new SocketClient();
}
return socketClient;
}
}
그럼 실제로 해당 객체가 같은 값을 가지는지 확인해보자.
Aclass, Bclass 를 생성하고, 각 class 에서 가져와 사용한 값이 같은 값인지 확인한다.
Aclass
public class AClass {
private SocketClient socketClient;
public AClass(){
// 위에서 구현한 socketClient 객체를 가져와서
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient(){
// 리턴한다
return this.socketClient;
}
}
Aclass와 동일한 기능을 하는 Bclass 생성
Bclass
public class BClass {
private SocketClient socketClient;
public BClass(){
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient() {
return this.socketClient;
}
}
main 에서 위의 두 클래스 객체를 생성하여, 각 객체의 내부에서 사용하는 SocketClient가 동일 객체인지 확인한다.
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("두 객체가 동일한가?");
//결과는 true. 동일한 값 임을 확인가능하다.
System.out.println(aClient.equals(bClient));
}
정상적으로 동일 객체임을 확인 가능하다.
기본적으로 단 1개의 객체만 존재해야 할 경우 많이 사용하는 패턴으로, 필수로 알아두자!
참고
- 패스트캠퍼스 예상국 Backend Developer님 강의(Spring초격차)
'Backend > Java' 카테고리의 다른 글
프록시 패턴(Proxy pattern) 예제 코드로 이해하기 (0) | 2022.04.03 |
---|---|
어댑터 패턴(Adapter Pattern)예제 코드로 이해하기 (0) | 2022.03.08 |
[이펙티브자바] try-with-resources를 사용하자. (0) | 2021.07.20 |
[이펙티브자바] finalizer와 cleaner 사용을 피하자. (0) | 2021.07.20 |
[이펙티브자바] 다 쓴 객체 참조를 해제하자. (0) | 2021.07.07 |