# 설명
소프트웨어(프로그램)내에서 하나의 인스턴스만 필요할때 사용한다. 하나의 인스턴스만이 사용되기 때문에 인스턴스 내 데이터를 쉽게 공유할 수 있다.
# 코드
package singleton;
import java.util.ArrayList;
/*
싱글톤 패턴 요약
소프트웨어(프로그램 내) 하나의 인스턴스만을 사용하기 위해서 사용하는 패턴이다.
static으로 선언하는 경우 클래스를 생성하지 않고, jvm에 올라가면서 메모리에 잡힌다. 이것을 이용한다.
디폴트 생성자를 private로 바꾸줌으로써 다른 곳에서는 해당 클래스의 인스터스를 생성할 수 없도록한다.
getInstance메서드 역시 static으로 선언해야 한다. 왜냐하면 인스턴스 자체를 생성할 수 없기 때문에 static으로 정의하지 않으면
함수 자체를 사용 할 수 없다.
인스턴스의 존재 유무를 검사하고, 없다면 새로운 인스턴스를 만들고 반환한다.
*/
public class Connectionpool {
private static Connectionpool connectionpool = new Connectionpool();
private Connectionpool(){}
public ArrayList<String> connectionList = new ArrayList<String>();
public void getArray() {
for ( int i=0; i<connectionList.size(); i++) {
System.out.println(connectionList.get(i));
}
}
public static Connectionpool getInstance() {
if ( connectionpool == null) {
connectionpool = new Connectionpool();
}
return connectionpool;
}
}
# 테스트
package singleton;
public class Test {
public static void main(String args[]) {
// Connectionpool con = new Connectionpool() 인스턴스를 생성 할 수 없음.
Connectionpool con1 = Connectionpool.getInstance();
Connectionpool con2 = Connectionpool.getInstance();
System.out.println("con1 : " + con1);
System.out.println("con2 : " + con1);
System.out.println("con1 == con2 : " + (con1 == con2));
con1.connectionList.add("1");
con1.connectionList.add("2");
con1.connectionList.add("3");
con2.getArray();
}
}
- 새로운 인스턴스를 생성 할 수 없는것을 볼 수 있다.
- con1과 con2과 결국 똑같은 메모리 주소를 가지고 있고, 결국 같은 인스턴스인 것을 알 수 있다.
- 그렇기 때문에 con1에 List에추가해주었지만 con2에서 사용할 수 있는 것을 알 수 있다.
'• 독서 > Design Pattern' 카테고리의 다른 글
[디자인패턴-위임/팩토리패턴] 팩토리 메소드 패턴 (Factory-Method Pattern) (2) | 2022.09.20 |
---|---|
[디자인패턴-위임패턴] 템플릿 메서드 패턴(Template Method) (0) | 2022.09.18 |
[디자인패턴-생성패턴] 빌더 패턴(Builder Pattern) (2) | 2022.09.17 |
[디자인패턴-생성패턴] 추상팩토리 패턴(Abstract-Factory pattern) (0) | 2022.09.17 |
[디자인패턴-생성패턴] 프로토타입 패턴(Prototype Pattern) (0) | 2022.09.16 |