package _20_DesignPattern;
class A {
// SingletonPattern01을 변수로 갖는다.
private SingletonPattern01 singleA;
// 기본생성시 자동생성되게 한다.
public A() {
this.singleA = SingletonPattern01.getSingleton();
}
public SingletonPattern01 getASingleton() {
return this.singleA;
}
}
class B {
// SingletonPattern01을 변수로 갖는다.
private SingletonPattern01 singleB;
// 기본생성시 자동생성되게 한다.
public B() {
this.singleB = SingletonPattern01.getSingleton();
}
public SingletonPattern01 getBSingleton() {
return this.singleB;
}
}
public class SingletonPattern01 {
/* Spring @Bean 클래스는 Singleton 클래스가 한개만 존재해야할 때사용...
* 자원을 공유할때 사용한다.*/
// 자신의 객체를 Private static하게 갖고 있어야한다.
private static SingletonPattern01 singleton;
// private하게 생성자를 설정한다.
private SingletonPattern01() {
//
}
public static SingletonPattern01 getSingleton () {
if(singleton == null) {
singleton = new SingletonPattern01();
}
return singleton;
}
public static void main(String[] args) {
A a = new A();
B b = new B();
SingletonPattern01 aa = a.getASingleton();
SingletonPattern01 bb = b.getBSingleton();
System.out.println(aa.equals(bb));
}
}
먼저 소스를 보여드리겠습니다.
1. Singleton패턴을 설명하기위한 소스입니다.
SingletonPattern01클래스를 보면 자신클래스에 자신을 static 에 참조변수로 갖고 있습니다.
그리고 생성자와 변수도 private로 외부에서 생성할수 없게 했습니다.
2. 그리고 클래스 A, B에
각각 A, B 생성자를 만들면 기본으로 SingletonPattern01
인스턴스가 있다면 생성해서 반환거나 있으면 바로 반환합니다.
3. 그리고 A와 B에서 각 각 자신의 SingletonPattern01을 반환하는 메소드를 정의해줍니다.
4. A와 B의 인스턴스를 각 각 a, b로 생성하고
a, b에서 각각 자신의 SinglethonPattern01을 반환하는 메소드를 호출해 a는 aa에
b는 bb에 반환합니다.
5. 그리고 a와 b의 객체를 비교하는 equals()를 하면 true(같다.) 가 나옵니다.
싱글톤 동작 정리!
1. 자신을 static하게 갖고있어 메모리에 상주하게 되며
2. A, B의 객체가 생성시 인스턴스가 생성되게됩니다.
위에서는 A를 먼저 생성해 SigletonPattern 인스턴스를 만들었고
B는 생성된 주소를 넘겨받습니다.
3. 위 SingletonPattern01을 반환하는 메소드를 정의한 메소드에 각각에 참조변수에 자신이 갖고있는 주소값을 전달합니다.
4. 두 참조변수는 주소 같은 주소 (동일 인스턴스) 이므로 true가 나오게 됩니다..
Java Stream 자바 스트림 공부 정리 (2) | 2021.08.24 |
---|---|
java design pattern Adapter 자바 디자인 패턴 어댑터 (1) | 2021.08.22 |
자바 람다식 ( java lambda expression ) 정리하기 part01 (2) | 2021.08.19 |
Lombok이란? 롬복 어노테이션 Lombok Annotation (0) | 2021.08.18 |
[JAVA]Collection(컬렉션)의 자료구조 정리 _Part04.HashSet (해시셋) (4) | 2021.08.15 |
댓글 영역