-
[Spring/디자인패턴] 싱글톤 패턴Framework/Spring 2021. 7. 18. 21:42
싱글톤 패턴- 싱글톤 패턴은 어떠한 클래스(객체)가 유일하게 1개만 존재할 때 사용한다.
- 이를 주로 사용하는 곳은 서로 자원을 공유할 때 사용하는데, 실물 세계에서는 프린터가 해당되며 실제 프로그래밍에서는 TCP Socket통신에서 서버와 연결된 connect객체에 주로 사용된다.
싱글톤 패턴 예제
<SocketClient>
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로 지정함으로써 새로운 객체를 만들지 못하도록 선언하였다.
- 해당 객체를 생성하기 위해서는 getInstance라는 메서드를 호출해야하고, 해당 메서드는 SocketClient가 null일 경우 새로운 객체를 하나 생성하고, 아닐 경우 SocketClient를 return한다.
<AClazz>
public class AClazz { private SocketClient socketClient; public AClazz(){ this.socketClient = SocketClient.getInstance(); } public SocketClient getSocketClient(){ return this.socketClient; } }
<BClazz>
public class BClazz { private SocketClient socketClient; public BClazz(){ this.socketClient =SocketClient.getInstance(); } public SocketClient getSocketClient(){ return this.socketClient; } }
<Main>
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모두 생성자를 통해 객체를 생성할 때 getInstance를 호출하여 생성한다. 때문에 두개의 객체는 동일하다고 나오게 된다.
'Framework > Spring' 카테고리의 다른 글
[Spring/디자인패턴] 프록시 패턴 (0) 2021.07.18 [Spring/디자인패턴] 어댑터 패턴 (0) 2021.07.18 [Spring/디자인패턴] 디자인패턴 (0) 2021.07.17 [Spring] 객체지향 설계 5원칙 SOLID (0) 2021.07.17 [Spring] 객체지향 4가지 (0) 2021.07.16