๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋…์„œ

ํ—ค๋“œ ํผ์ŠคํŠธ ๋””์ž์ธ ํŒจํ„ด

by moon101 2022. 11. 5.

 

๋””์ž์ธ ํŒจํ„ด์„ ์ƒ์„ฑ ํŒจํ„ด, ํ–‰๋™ ํŒจํ„ด, ๊ตฌ์กฐ ํŒจํ„ด์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ƒ๊ฐํ•ด ๋ณด์•„์•ผ ํ•œ๋‹ค. 

 

https://post.naver.com/viewer/postView.naver?volumeNo=33471967&memberNo=25379965&vType=VERTICAL

 

 

2022.11.05(ํ† )

์ฑ•ํ„ฐ 1 - Strategy Pattern (์ „๋žต ํŒจํ„ด)

์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„๋ถ€๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

(Java interfaces have no implementation code, so no code reuse)

-> ์ฆ‰, ํ–‰๋™์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ํ–‰๋™์ด ์ •์˜๋œ ์ž์‹ํด๋ž˜์Šค ๋˜ํ•œ ๋‹ค ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. 

 

๋””์ž์ธ ์›์น™์˜ ๊ธฐ๋ณธ์€ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

๋˜ ๋‹ค๋ฅธ ์›์น™์€ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ”„๋กœ๊ทธ๋žจํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

(program to an interface, in other words, program to a supertype)

 

Composition์ด inheritance๋ณด๋‹ค ๋‚ซ๋‹ค.

(Favor composition over inheritance)

- ๋Ÿฐํƒ€์ž„์— ํ–‰์œ„(behavior) ๋ณ€๊ฒฝ 

 

JDK์—์„œ ์‚ฌ์šฉ๋œ ์ „๋žตํŒจํ„ด

- Comparator<T>

 

// TODO

์ „๋žต ํŒจํ„ด์„ ์ต๋ช…/๋žŒ๋‹ค ํ•จ์ˆ˜๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•œ์ง€?


2022.11.12(ํ† )

์ฑ•ํ„ฐ 2 - Observer Pattern (์˜ต์„œ๋ฒ„ ํŒจํ„ด)

 

์‹ ๋ฌธ์„ ๊ตฌ๋…ํ•˜๋ฉด ๊ตฌ๋…์ž๋Š” ๊ตฌ๋…ํ•˜๋Š” ๋™์•ˆ ์‹ ๋ฌธ์‚ฌ๋กœ ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์‹ ๋ฌธ์„ ๊ณ„์† ๋ฐ›๋Š”๋‹ค.

Observer ํŒจํ„ด์—์„œ๋Š” ์‹ ๋ฌธ์‚ฌ๋ฅผ subject, ๊ตฌ๋…์ž๋ฅผ observers๋กœ ๋ถ€๋ฅธ๋‹ค. 

 

์ผ๋Œ€๋‹ค ์˜์กด์„ฑ. ํ•œ ๊ฐœ์˜ subject๊ฐ€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ. ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„.


2022.11. 26(ํ† )

์ฑ•ํ„ฐ 3 - Decorator Pattern (๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด)

 

ํด๋ž˜์Šค๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค(OCP).

 

ํ•ฉ์„ฑ๊ณผ ์œ„์ž„์„ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„์— ์ƒˆ๋กœ์šด ํ–‰๋™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์ „/ํ›„์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ํด๋ž˜์Šค ๋ณ€๊ฒฝ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. 

 

java.io ํŒจํ‚ค์ง€์˜ ๋Œ€๋‹ค์ˆ˜๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋จ. 


2022.12.03(ํ† )

์ฑ•ํ„ฐ 4 - Factory Pattern (ํŒฉํ† ๋ฆฌ ํŒจํ„ด)

์ถ”์ƒ ํŒฉํ† ๋ฆฌ

- ํ•ฉ์„ฑ์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ฆ

 

ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ : Dependency Injection์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด ์คŒ.

- abstract Product factoryMethod(String type)

- ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ƒ์„ฑํ•  ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๊ฑด์ง€ ์ •ํ•จ

- high-level ๋ชจ๋“ˆ๊ณผ low-level ๋ชจ๋“ˆ ๋ชจ๋‘ ์ถ”์ƒํ™”๋œ ํด๋ž˜์Šค์— ์˜์กดํ•จ. 

 

 

// TODO

๋‹ค์‹œ ์ฝ๊ณ .. ์ฝ”๋“œ ํ™•์ธํ•ด ๋ณด๊ธฐ


2022.12.10(ํ† )

์ฑ•ํ„ฐ 5 - Singleton Pattern (์‹ฑ๊ธ€ํ„ด ํŒจํ„ด)

ํด๋ž˜์Šค๊ฐ€ ๋‹จ ํ•œ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๊ฐ–๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ณ  ์ „์—ญ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.

 

One of a Kind Objects

๋‹จ ํ•œ ๊ฐœ๋งŒ ํ•„์š”ํ•œ ๊ฐ์ฒด ์˜ˆ: thread pool, caches, dialog boxes, preferences/registry settings๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด, ๋กœ๊น… ๊ฐ์ฒด ๋“ฑ

-> ์ด๋Ÿฐ ๊ฐ์ฒด๋“ค์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•˜๋ฉด ์ž์›์ด ํ•„์š”์ด์ƒ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋˜๊ฐ€, ์ผ๊ด€์ ์ด์ง€ ์•Š์€ ๊ฒฐ๊ณผ ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. 

public MyClass {
	public static MyClass getInstance() {
    }
}

์—ฌ๊ธฐ์„œ MyClass์˜ static ๋ฉ”์†Œ๋“œ์ธ getInstance๋Š” Class ๋ฉ”์†Œ๋“œ์ด๊ธฐ๋„ ํ•˜๋‹ค. 

์ฆ‰, ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋ž˜์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์„œ static method๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค. 

์ด๋ ‡๊ฒŒ => MyClass.getInstance();

 

public MyClass {
	private MyClass() {}
    	public static MyClass getInstance() {
    		return new MyClass();
    }
}

์žฅ์ : lazy instantiation

๋ฌธ์ œ์  : ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ -> synchronized ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ๊ฐ•์ œํ•จ. -> ์‚ฌ์‹ค ์ฒ˜์Œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ๊ฐ€ ์•„๋‹ˆ๋ฉด synchronize ํ•  ํ•„์š”๊ฐ€ ์—†์Œ 

ํ•ด๊ฒฐ์ฑ…: 

1. ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ƒฅ synchronize the getInstance() method ์‚ฌ์šฉ.

2. lazy instantiation์—์„œ eager instantiation์œผ๋กœ ๋ฐ”๊พผ๋‹ค. JVM์ด ํด๋ž˜์Šค๊ฐ€ loaded ๋  ๋•Œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ. 

3. double-checked locking ์‚ฌ์šฉ. ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์•„๋‹ ๊ฒฝ์šฐ synchronize ํ•œ๋‹ค. -> ์ฒ˜์Œ ์ƒ์„ฑํ•  ๋•Œ๋งŒ synchronize ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ -> ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

best solution : enum์„ ์‚ฌ์šฉํ•ด์„œ ์‹ฑ๊ธ€ํ†ค์„ ๋งŒ๋“ฆ. 

- synchronization, class loading issues, reflection, serialization/deserialization ์ด์Šˆ๋“ค์ด enum์„ ์‚ฌ์šฉํ•ด์„œ ์‹ฑ๊ธ€ํ†ค์„ ์ƒ์„ฑํ•˜๋ฉด ํ•ด๊ฒฐ๋จ. 

 

// TODO

์™œ synchronize the getInstance() method๋ฅผ expensive ํ•˜๋‹ค๊ณ  ํ•˜๋Š” ๊ฑธ๊นŒ? (์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ด)

- synchoronized method๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ๋Š๋ฆฌ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ concurrency(๋™์‹œ์„ฑ)์„ ์ œํ•œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  deadlock์„ ์•ผ๊ธฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 


2022.12.17(ํ† )

์ฑ•ํ„ฐ 6 - Command Pattern (์ปค๋งจํŠธ ํŒจํ„ด)

์š”์ฒญ์„ ๊ฐ์ฒด๋กœ ์บก์Šํ™”ํ•œ๋‹ค.  -> ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ๊ฐ€๋Šฅ. ์š”์ฒญ์„ ํ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ฒŒ ๊ฐ€๋Šฅ. ์ž‘์—… ์ทจ์†Œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด์„œ ๋ฌธ์„œ ์ž‘์—… ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ command pattern์„ ์‚ฌ์šฉ. ctrl + z ํ•  ๋•Œ?

 

execute() ๋ฉ”์†Œ๋“œ๋Š” action ํ•˜๊ณ  receiver๋ฅผ ํฌํ•จํ•จ. 

 

์ปค๋งจ๋“œ ํŒจํ„ด์€ ์š”์ฒญ์˜ invoker๋ž‘ receiver๋ฅผ decoupling ํ•ด์คŒ. 

 

๋ฆฌ๋ชจํŠธ ์ปจํŠธ๋กค์ด invoker ์—ญํ• ์„ ํ•จ. -> ๋ฆฌ๋ชจ์ปจ์„ ๋ˆ„๋ฅด๋ฉด execute() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•ด๋‹นํ•˜๋Š” ์ปค๋งจ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ.  

 

// TODO

๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๊ธฐ

๋žŒ๋‹ค์‹ ํ™œ์šฉ ๋ฐฉ๋ฒ• (์ปค๋งจ๋“œ ์ธํ„ฐํŽ˜์ด์Šค์— ๋‹จ ํ•˜๋‚˜์˜ abstract method๋งŒ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

-> ์ƒ˜์ด๋ผ๊ณ  ํ•จ. Single Abstract Method


2022.12.24(ํ† )

์ฑ•ํ„ฐ 7 - Adapter and Facade Patterns (์–ด๋Œ‘ํ„ฐ ํŒจํ„ด๊ณผ ํผ์‚ฌ๋“œ ํŒจํ„ด)

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด

์–ด๋Œ‘ํ„ฐ์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ˜ธํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์คŒ

 

ํผ์‚ฌ๋“œ ํŒจํ„ด

๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์˜ ๋ณต์žกํ•œ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ๋‹จ์ˆœํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต

 

Law of Demeter = Principle of Least Knowledge 

 

 

์ฑ•ํ„ฐ 8 - Template Method Pattern (ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด)

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ์ž์‹ํด๋ž˜์Šค๊ฐ€ ํ•œ ๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹จ๊ณ„๋ฅผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์—†์ด ์žฌ์ •์˜ํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ

 

์ถ”์ƒํด๋ž˜์Šค์— ์ •์˜๋œ ํ›…์€ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด๋„ ๋˜๊ณ  ์•ˆ ํ•ด๋„ ๋จ. ์˜ต์…”๋„์ž„

 

ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ sort() - Java Arrays class

 

์ „๋žต ํŒจํ„ด๊ณผ ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ๋ชจ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์บก์Šํ™”ํ•˜์ง€๋งŒ,

์ „๋žต ํŒจํ„ด์€ ํ•ฉ์„ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ๋Š” ์ƒ์†์„ ์‚ฌ์šฉํ•œ๋‹ค. 

 

// TODO

Factory Method is a specialization of Template Method.


2022.12.31(ํ† )

์ฑ•ํ„ฐ 9 - Iterator and Composite Patterns (๋ฐ˜๋ณต์ž ํŒจํ„ด๊ณผ ์ปดํฌ์ง€ํŠธ ํŒจํ„ด)

๋ฐ˜๋ณต์ž ํŒจํ„ด (ํ–‰๋™)

- ์ปฌ๋ ‰์…˜ ์š”์†Œ๋“ค์˜ ๊ธฐ๋ณธ ํ‘œํ˜„(๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํŠธ๋ฆฌ ๋“ฑ)์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ–‰๋™ ๋””์ž์ธ ํŒจํ„ด -> ์ปฌ๋ ‰์…˜์˜ ์ˆœํšŒ ๋™์ž‘์„ ๋ฐ˜๋ณต์ž๋ผ๋Š” ๋ณ„๋„์˜ ๊ฐ์ฒด๋กœ ์ถ”์ถœ

- ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ

- ํ–ฅ์ƒ๋œ for ๋ฌธ์€ iterable interface๋ฅผ ์‚ฌ์šฉ (hasNext(), next() ์‚ฌ์šฉ ์•ˆ ํ•ด๋„ ๋จ)

 

์ปดํฌ์ง€ํŠธ ํŒจํ„ด (๊ตฌ์กฐ)

- ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ

- ๊ฐœ๋ณ„ ๊ฐ์ฒด์™€ ๋ณตํ•ฉ ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•จ

 

์ฑ•ํ„ฐ 10 - State Pattern (์ƒํƒœ ํŒจํ„ด)

์ƒํƒœ ํŒจํ„ด (ํ–‰๋™)

- ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ํ–‰๋™์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ

- ๊ฐ์ฒด๊ฐ€ ํ–‰๋™์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๊ฐ์ฒด๊ฐ€ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์Œ

- ์ „๋žต ํŒจํ„ด๊ณผ ๋น„์Šทํ•จ. (๋‹จ, ์ „๋žตํŒจํ„ด์€ ์„œ๋ธŒํด๋ž˜์Šค์˜ ๋Œ€์•ˆ์ด๊ณ , ์ƒํƒœ ํŒจํ„ด์€ ์กฐ๊ฑด์ ˆ์˜ ๋Œ€์•ˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ)


2023.01.07(ํ† )

์ฑ•ํ„ฐ 11 - Proxy Pattern (ํ”„๋ก์‹œ ํŒจํ„ด)

ํ”„๋ก์‹œ ํŒจํ„ด (๊ตฌ์กฐ)

- RMI(Remote Method Invocation)

RMI๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋กœ ๊ตฌ์„ฑ๋จ. 

https://docs.oracle.com/javase/tutorial/rmi/overview.html

ํ”„๋ก์‹œ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋Œ€์ฒด ๋˜๋Š” ์ž๋ฆฌํ‘œ์‹œ์ž๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ ๋””์ž์ธ ํŒจํ„ด

๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด. ํด๋ž˜์Šค์˜ ๋ฉ”์ธ ๋กœ์ง ์ด์ „์ด๋‚˜ ์ดํ›„์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋ก์‹œ๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. 

 

// TODO

์ง๋ ฌํ™” ๊ณต๋ถ€ํ•˜๊ธฐ

RMI ๋ฐ ํ”„๋ก์‹œ ํŒจํ„ด ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๊ธฐ

์ž๋ฐ” ๋ฆฌํ”Œ๋ ‰์…˜, getClass(), getClassLoader()


2023.01.14(ํ† )

์ฑ•ํ„ฐ 12 - Compound Patterns (๋ณตํ•ฉ ํŒจํ„ด)

๋ณตํ•ฉ ํŒจํ„ด : 2๊ฐœ ์ด์ƒ์˜ ํŒจํ„ด์„ ๋ณตํ•ฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ. 

Model-View-Controller

model: Observer ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด views๋ž‘ controllers์—๊ฒŒ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ์—…๋ฐ์ดํŠธํ•ด ์คŒ

view & controller:  ์ „๋žต(strategy) ํŒจํ„ด์„ ์‚ฌ์šฉํ•จ. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ทฐ์˜ strategy์ด๊ณ , ๋ทฐ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์œˆ๋„์šฐ๋‚˜ ๋ฒ„ํŠผ ๋“ฑ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด composite ํŒจํ„ด์„ ์‚ฌ์šฉํ•จ. 

 

MVC์— ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด๋“ค: 

  • strategy pattern
  • composite pattern
  • observer pattern

2023.01.28(ํ† )

์ฑ•ํ„ฐ 13 - Better Living with Patterns (์‹ค์ „ ๋””์ž์ธ ํŒจํ„ด)

๋””์ž์ธ ํŒจํ„ด์˜ name, problem, solution, ๊ทธ๋ฆฌ๊ณ  consequences ์•Œ๊ธฐ

 

๋””์ž์ธ ํŒจํ„ด ์นดํ…Œ๊ณ ๋ฆฌ

ํŒจํ„ด์˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ƒ์„ฑ, ํ–‰๋™, ๊ตฌ์กฐ ํŒจํ„ด์œผ๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ ํŒจํ„ด์ด ํด๋ž˜์Šค ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š”์ง€์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋ฅธ ํŒจํ„ด ์ข…๋ฅ˜๋“ค

- Architectural Patterns

- Application Patterns

- Domain-Specific Patterns

- Business Process Patterns

- Organization Patterns

- User Interface Design Patterns

๋””์ž์ธ ํŒจํ„ด ๊ธฐ๋ณธ์„œ. c++, smalltak ์‚ฌ์šฉ

 

์ž๋ฐ” ์‚ฌ์šฉ


2023.02.04(ํ† )

์ฑ•ํ„ฐ 14 - Appendix (๊ธฐํƒ€ ํŒจํ„ด)

The Bridge Pattern

- ์ถ”์ƒํ™”์™€ ๊ตฌํ˜„๋ถ€ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

The Builder Pattern

- ๋ณต์žกํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์บก์Šํ™”ํ•œ๋‹ค. 

The Chain of Responsibility Pattern

- ํ•œ ๊ฐœ ์ด์ƒ์˜ ๊ฐ์ฒด์—๊ฒŒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.  (๊ฐ์ฒด A๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฉด ๊ฐ์ฒด B๋กœ ๋„˜์–ด๊ฐ€๊ณ  ๊ฐ์ฒด B๊ฐ€ ์ฒ˜๋ฆฌ ๋ชปํ•˜๋ฉด ๊ฐ์ฒด C๋กœ ๋„˜์–ด๊ฐ€๊ณ  ๊ฐ์ฒด C๊ฐ€ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅํ•˜๋ฉด ์š”์ฒญ์€ C์—์„œ ์ฒ˜๋ฆฌ๋˜๊ณ  ๊ฐ์ฒด D๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฉด ์š”์ฒญ์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.)

- ์ฃผ๋กœ ์œˆ๋„์šฐ ํ‚ค๋ณด๋“œ์—์„œ ๋งˆ์šฐ์Šค ํด๋ฆญ์ด๋‚˜ ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ๋ฅผ ํ•ธ๋“ค๋งํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. 

The Flyweight Pattern

- ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์ˆ˜๋ฅผ ์ค„์ž„์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. 

- ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ€์ƒ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. 

The Interpreter Pattern

- ๋‹จ์ˆœํ•œ ์–ธ์–ด๋ฅผ ํ•ด์„ํ•  ๋•Œ ์œ ์šฉํ•œ ํŒจํ„ด์ด๋‹ค. 

The Mediator Pattern

- ๊ฐ์ฒด ๊ฐ„์˜ ์ง์ ‘ ํ†ต์‹  ์ œํ•œํ•˜๊ณ  ์ค‘์žฌ์ž ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ˜‘๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค. 

The Memento Pattern

- ๊ฐ์ฒด๋ฅผ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆด ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 

- ๊ฐ์ฒด์˜ ์ค‘์š” ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฐ์ฒด์˜ ์บก์Šํ™”๋ฅผ ์œ ์ง€ํ•œ๋‹ค. 

- ์ž๋ฐ”์—์„œ๋Š” ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค. 

The Prototype Pattern

- ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ๊ฐ์ฒด๋“ค์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ƒ์„ฑ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. 

- ์ž๋ฐ”์—์„œ๋Š” clone() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ ์—ญ์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

The Visitor Pattern

- ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด ๊ฐ์ฒด๋“ค๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ–‰๋™ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. 

- ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ปดํฌ์ง€ํŠธ ๊ตฌ์กฐ์— ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

์ฐธ๊ณ ์ž๋ฃŒ

https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Observable.html

https://post.naver.com/viewer/postView.naver?volumeNo=33471967&memberNo=25379965&vType=VERTICAL 

https://wickedlysmart.com/head-first-design-patterns/

https://refactoring.guru/ko

https://johngrib.github.io/wiki/pattern/composite/

https://docs.oracle.com/javase/tutorial/rmi/

https://circle.visual-paradigm.com/catalog/

 

 

๋Œ“๊ธ€