728x90
반응형
Singleton Pattern
- 우리가장 많이 듣고 접하는 패턴 중에 하나이다.
- 싱글턴 패턴은 요청의 숫자와 관계없이 한번 만들어둔 객체를 사용하게 된다.
- 안티패턴이라고 불린다. 이유는 다음과 같다.
- 싱글톤을 위한 코드가 필요하다.
- private 변수에 new 를 사용하기 떄문에 상속이 힘들다.
- 클라이언트가 반드시 구체클래스를 의존해야 된다(getInstance 함수 사용)
- Singleton은 이미 설정이 정해져 있다.
Singleton Pattern 구조
Singleton Pattern 구현
Singleton class
package patterns.singleton;
public class Singleton {
static private Singleton singleton = null;
private String name;
private Singleton() {
}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
코드분석
핵심코드
- 1. static private Singleton singleton = null;
- static 을 사용한 이유는 여러번 생성하는게 아니라 한번만 생성하기 때문에 static 으로 선언한다.
- static 을 사용하게 되면 가비지 컬렉터가 관여하지 않기 때문에 메모리에서 제거 되지 않는다.
- 모든 객체가 메모리를 공유하게 된다. - 2. private Singleton
- 다른 곳에서 new 로 생성하지 못하도록 한다. - 3. getInstatnce()
- getInstatnce 함수를 통해서만 가져온다.
- 동일한 객체를 사용하기 위함.
Main class
package patterns.singleton;
public class Main {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
singleton1.setName("single1");
singleton2.setName("single2");
System.out.println("single1 name: "+singleton1.getName());
}
}
결과
- 객체 single1, single2 를 생성후 이름을 다르게 주었지만
- single1 이름 이 변경되었다.
- 이로써 객체를 공유한다는 것을 파악할수 있다.
single1 name: single2
728x90
반응형
'Design pattern > GoF(인강편)' 카테고리의 다른 글
[Design Pattern] Builder Pattern (0) | 2021.11.24 |
---|---|
[Design Pattern] Prototype Pattern (0) | 2021.11.24 |
[Design Pattern] Factory Method Pattern (0) | 2021.11.24 |
[Design Pattern] Template Method Pattern (0) | 2021.11.10 |
[Design Pattern] Adapter Pattern (0) | 2021.10.28 |
댓글