@@ -3,7 +3,7 @@ layout : wiki
33title : GoF DesignPattern
44summary : GoF 디자인 패턴
55date : 2019-04-24 08:52:39 +0900
6- updated : 2021-09-01 20: 18:01 +0900
6+ updated : 2021-12-29 18:33:23 +0900
77tags : book, designpattern
88toc : true
99public : true
@@ -36,10 +36,86 @@ adsense : true
3636
3737## Chapter 3. 생성패턴
3838
39+ ### Sigleton Pattern
40+
41+ * 오직 한개만 제공하는 클래스
42+
43+ ```
44+ public class Foo {
45+ private static Foo instance;
46+
47+ private Foo() {}
48+
49+ public static Foo getInstance() {
50+ if (instance != null) {
51+ return new Foo();
52+ }
53+
54+ return instance;
55+ }
56+ }
57+ ```
58+
59+ * multi thread 환경에서 Trhead safe 하지 않다.!
60+ * sychronized keyword 사용하기 -> 성능의 손해가 있다.
61+ * 이른 초기화: static block 에서 미리 만들어 준다.
62+ * double checked locking: 변수 선언시 volatile keyword 필요
63+
64+ ```
65+ private static volatile Foo instance;
66+
67+ public static Foo getInstance() {
68+ if (instance != null) {
69+ synchroized (Foo.class) {
70+ return new Foo();
71+ }
72+ }
73+
74+ return instance;
75+ }
76+ ```
77+
78+ * static inner class 사용하기
79+
80+ ```
81+ public class Foo {
82+ private static Foo instance;
83+
84+ private Foo() {}
85+
86+ private static class FooHolder {
87+ private static final Foo INSTANCE = new Foo();
88+ }
89+
90+ public static Foo getInstance() {
91+ return FooHolder.INSTANCE;
92+ }
93+ }
94+ ```
95+
96+
3997### 추상 팩토리 패턴 (Abstract Factory Pattern)
4098
4199* ` Abstract Factory ` , ` AbstractProduct ` 두개로 추상화된 인터페이스를 의존하게 된다. 중요한 포인트는 생성되는 객체의 집합을 하나의 팩토리에서 정의를 하는게 중요하다.
42100 * 집한군을 생성하는게 아니라면 Factory Method Pattern 을 이용하는게 좋을듯 하다.
43101 * 단점은, 만들어야할 제품군이 추가되는 요구사항에 유연하지 못하다. -> 동적타입언어를 이용한다면 이부분도 유연하게 구현은 가능할듯
44102
45103* [ 싱글턴패턴관련] ( https://lee1535.tistory.com/75?category=819409 )
104+
105+ ### Prototype Pattern
106+
107+ * 복제 기능을 갖추고 있는 기존 인스턴스를 프로토타입으로 사용해 새 인스턴스를 만들 수 있다.
108+
109+ * Java 에서 Clone
110+ * Clonable interface 를 구현하면 된다.
111+ * Java 에서 제공해주는 것은 기본적으로 얕은 복사
112+
113+ * 장점
114+ * 복잡하게 객체를 만드는 과정을 숨길 수 있다.
115+ * 비용이 효율적일 수 있다.
116+ * 추상적인 타입을 리턴할 수 있다.
117+ * 단점
118+ * 구현 과정이 복잡해질 수 있다. 순환 참조가 있는경우
119+
120+
121+
0 commit comments