안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 경우에 인스턴스를 여러개 만들게 되면
불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳을 수 있다고 해요.
싱글턴 패턴은 오직 하나의 인스턴스만 생성해 그것을 계속 재사용합니다.
싱글턴 패턴을 적용하면 의미상의 두 개의 객체가 존재할 수 없어요.
따라서 아래 세가지 조건이 반드시 필요해요.
-new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다.
-유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.
-유일한 단일 객체를 참조할 정적 참조 변수가 필요하다.
예제를 보겠습니다.
Singleton.java
package singletonPattern;
public class Singleton {
static Singleton singletonObject; // 정적 참조 변수
private Singleton() {
}; // private 생성자
// 객체 반환 정적 메서드
public static Singleton getInstance() {
if (singletonObject == null) {
singletonObject = new Singleton();
}
return singletonObject;
}
}
단일 객체를 저장하기 위한 정적 참조 변수가 있죠. 또 new를 생성할 수 없도록 생성자에
private를 지정 했어요. getInstance() 정적 메서드를 보면 정적 참조 변수에 객체가 할당돼 있지 않은 경우에만 new를 통해 객체를 만들고 정적 참조 변수에 할당합니다. 그리고 정적 참조 변수에 할당돼 있는 유일한 객체를 참조 반환해요.
Client.java//테스트 코드입니다.
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;
}
}
실행결과를 보면 s1,s2,s3가 다같은 값을 출력하는 것을 볼 수 있습니다.
참조변수들이 단 하나의 단일 객체를 참조하기 때문이죠
싱글턴 패턴에서 기억해 둘 특징은 아래 4자기 입니다.
-private 생성자를 갖는다.
-단일 객체 참조 변수를 정적 속성으로 갖는다.
-단일 객체 참조 변수가 참조하는 단일 객체를 반환하는 getInstance()정적 메서드를 갖는다.
-단일 객체는 쓰기 가능한 속성을 갖지 않는 것이 정석이다.
마지막으로 싱글턴 패턴을 한 문장으로 정리해보면
-클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴- 입니다.
'개발 etc' 카테고리의 다른 글
JAVA 자바 팩터리 메서드 패턴(Factory Method Pattern) (0) | 2017.03.12 |
---|---|
JAVA 자바 템플릿 메서드 패턴(Template Method Pattern) (0) | 2017.03.12 |
JAVA 자바 데코레이터 패턴(Decorator Pattern) (0) | 2017.03.12 |
JAVA 자바 프록시 패턴(Proxy Pattern) (0) | 2017.03.12 |
JAVA 자바 어댑터 패턴(Adapter Pattern) (0) | 2017.03.12 |