2018. 6. 1. 20:09ㆍ용어정리/#디자인패턴
[ Singleton Pattern ]
싱글턴 패턴
2018 - 06 - 01
싱글턴 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다.
커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우 인스턴스를 여러 개 만들게 되면
불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳은 수 있다.
싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다.
싱글턴 패턴을 적용할 경우 의미상 두 개의 객체가 존재할 수 없다.
이를 구현하려면 객체 생성을 위한 new에 제약을 걸어야 하고,
만들어진 단일 객체를 반환할 수 있는 메서드가 필요하다.
따라서 필요한 요소를 생각해 보면 다음 세 가지가 반드시 필요하다.
- new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다.
유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.
유일한 단일 객체를 참조할 정적 참조 변수가 필요하다.
코드를 보면서 이해해 보자.
Singleton.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package singletonPattern; public class Singleton.java { static Singleton SingletonObject; // 정적 참조 변수 private Singleton() { }; // private 생성자 //객체 반환 정적 메서드 public static Singleton getInstance() { if (singletonObject == null){ singletonObject = new Singleton(); } return singletonObject; } } | cs |
Client.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package singletonPattern; public class Client { public static void main(String[] args){ // private 생성자이므로 new를 통해 생성할 수 없다. // Singleton s = new Singleton(); Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); Singleton s3 = Singleton.getInstance(); System.out.println(s1); System.out.println(s2); System.out.println(s3); s1 = null; s2 = null; s3 = null; } } | cs |
6번째 줄의 주석을 풀면 바로 에러가 나는 것을 확인할 수 있다.
private 생성자이기에 Singleton 외부에서 new 를 이용해 객체를 생성할 수 없기 때문이다.
주석을 풀었을 때 표시되는 에러 메세지는 다음과 같다.
The constructor Singleton() is not visible
기억해둘 싱글턴 패턴의 특징은 다음과 같다.
private 생성자를 갖는다.
단일 객체 참조 변수를 정적 속성으로 갖는다.
단일 객체 참조 변수가 참조하는 단일 객체를 반환하는 getInstance() 정적 메서드를 갖는다.
단일 객체는 쓰기 가능한 속성을 갖지 않는 것이 정석이다.
싱글턴 패턴을 한 문장으로 정리하면
"클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴"
출처
스프링 입문을 위한 자바 객체 지향의 원리와 이해
김종민 저
'용어정리 > #디자인패턴' 카테고리의 다른 글
용어정리-[#디자인패턴] 5.Template Method Pattern (0) | 2018.06.01 |
---|---|
용어정리-[#디자인패턴] 3.Decorator Pattern (0) | 2018.06.01 |
용어정리-[#디자인패턴] 2.Proxy Pattern (0) | 2018.06.01 |
용어정리-[#디자인 패턴] 1.Adapter Pattern (0) | 2018.06.01 |