02. 자바 싱글톤 패턴 (JAVA Singleton Pattern)
# 참고한 영상
# 설명
전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며,
생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴
하나의 인스턴스만을 생성하는 책임이 있으며.
getInstance 메서드를 통해 모든 클라이언트에게
동일한 인스턴스를 반환하는 작업을 수행한다.
# 장점
객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나
변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.
# 단점
전역 인스턴스이기 때문에 값 변경 시 유의해야한다.
# 사용 여부
3개의 제품을 연결하여도,
출력 되는 통로를 하나로 만들어 놓은다면,
선택한 제품 또는 가장 처리속도가 빠른 제품만
출력하게끔 할 수 있다.
# 사용 방법
# 구조
thread safe, serialize
# 요구 사항
# 변경 사항
# 결과
DCL
LazyHodler
Enum
# 1-1 Double Checked Locking Singleton Pattern (DCL Pattern)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/** Double Checked Locking (DCL) Singleton Pattern */
public final class DCLSingleton {
private String name = "DCL";
private static volatile DCLSingleton instance;
private DCLSingleton() {}
public static DCLSingleton getInstance() {
if (instance == null) {
synchronized (DCLSingleton.class) {
if (instance == null) {
instance = new DCLSingleton();
}
}
}
return instance;
}
public String getName() {
return name;
}
}
|
cs |
# 1-2 DCL Pattern Client
1
2
3
4
5
6
7
8
9
10
11
|
public class Client {
public static void main(String[] args) {
DCLSingleton singleton = DCLSingleton.getInstance();
System.out.println(singleton.getName());
}
}
|
cs |
# 2-1 LazyHolder Singleton Pattern
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/** LazyHolder Singleton Pattern */
public class LazyHolderSingleton {
private String name = "Lazy";
private LazyHolderSingleton() {}
private static class SingletonHolder {
private static final LazyHolderSingleton INSTANCE = new LazyHolderSingleton();
}
public static LazyHolderSingleton getInstance() {
return SingletonHolder.INSTANCE;
}
public String getName() {
return name;
}
}
|
cs |
# 2-2 LazyHolder Pattern Client
1
2
3
4
5
6
7
8
9
10
11
|
public class Client {
public static void main(String[] args) {
LazyHolderSingleton singleton = LazyHolderSingleton.getInstance();
System.out.println(singleton.getName());
}
}
|
cs |
# 3-1 Enum Singleton Pattern
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/** Enum Singleton pattern */
public enum EnumSingleton {
INSTANCE;
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
|
cs |
# 3-2 Enum Pattern Client
1
2
3
4
5
6
7
8
9
10
11
|
public class Client {
public static void main(String[] args) throws InterruptedException {
EnumSingleton singleton = EnumSingleton.INSTANCE;
System.out.println(singleton.getName());
}
}
|
cs |
# Diagram
# 참고 사이트
# 추가 참고 사이트
'92. 디자인 패턴 > 생성(Creational)' 카테고리의 다른 글
03. 자바 프로토타입 패턴 (JAVA Prototype Pattern) (0) | 2020.06.22 |
---|---|
01. 자바 팩토리 메소드 패턴 (JAVA Factory Method Pattern) (0) | 2020.06.19 |
댓글
이 글 공유하기
다른 글
-
03. 자바 프로토타입 패턴 (JAVA Prototype Pattern)
03. 자바 프로토타입 패턴 (JAVA Prototype Pattern)
2020.06.22 -
01. 자바 팩토리 메소드 패턴 (JAVA Factory Method Pattern)
01. 자바 팩토리 메소드 패턴 (JAVA Factory Method Pattern)
2020.06.19