Skip to content

Commit e4039e4

Browse files
committed
MOD 생성패턴 추가
1 parent 9f305ae commit e4039e4

1 file changed

Lines changed: 77 additions & 1 deletion

File tree

_wiki/GOF_DesignPattern.md

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ layout : wiki
33
title : GoF DesignPattern
44
summary : GoF 디자인 패턴
55
date : 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
77
tags : book, designpattern
88
toc : true
99
public : 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

Comments
 (0)