๐ŸŽซ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ part26. GOF

vincaยท2023๋…„ 1์›” 2์ผ
0

๐Ÿ”„ Software engineering

๋ชฉ๋ก ๋ณด๊ธฐ
17/17

Factory ํŒจํ„ด (๋งŒ๋“ค๋ผ๊ณ  ๊ณต์žฅ์— ์ผ์„ ์ „๋‹ฌ)

  • ๋ˆ„๊ฐ€ Adapyer๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
    โ†’ ๊ด€์‹ฌ ๋ถ„๋ฆฌ์˜ ์›์น™์— ๋”ฐ๋ผ ๋†’์€ ์‘์ง‘๋„๋ฅผ ๊ฐ€์ง€๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ Factory๊ฐ€!

Lazy initialization์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ํ™”๋ฉด๋งŒ ๊ทธ๋•Œ๊ทธ๋•Œ ๋งŒ๋“ค์–ด์ค€๋‹ค.

Strategy pattern

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ–์œผ๋กœ ๋นผ์„œ, polymorphism(๋‹คํ˜•์„ฑ)์„ ์‚ฌ์šฉํ•˜์—ฌ plug-inํ˜•ํƒœ๋กœ ๋งŒ๋“ ๋‹ค.
    ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ•„์š”ํ•œ ์ „๋‹ฌ๋˜๋Š” data์ธ Sale์„ Context Object๋ผ๊ณ  ํ•œ๋‹ค.
    Strategy๋ฅผ ์ƒ์„ฑํ•  ์ฑ…์ž„์€ Factory Pattern์ด ๊ฐ–๋Š”๋‹ค.

Static๊ณผ Singleton์˜ ์ฐจ์ด์ 

Q. ์™œ ๋ชจ๋“  ์„œ๋น„์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ํด๋ž˜์Šค ์ž์ฒด์˜ ์ •์  ๋ฉ”์†Œ๋“œ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ , ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š”๊ฐ€?
โ†’ ์ •์  ๋ฉ”์†Œ๋“œ(static)๋Š” ๋‹คํ˜•์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ.
๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด์ง€ํ–ฅ ์›๊ฒฉํ†ต์‹ ์€ ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

Composite ํŒจํ„ด๊ณผ ๊ธฐํƒ€ ์„ค๊ณ„ ์›์น™

  • ๋ณตํ•ฉ์ ์ธ ๊ฐ€๊ฒฉ์ •์ฑ…์ด ์žˆ์„ ๋•Œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Observer / Publish-Subscribe / Delegation Event Model

  • ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๊ฐ€ UI๋ฅผ ๋ชจ๋ฅด๋”๋ผ๋„ ์–ด๋– ํ•œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด UI์—๊ฒŒ ๊ฐ’์„ ์ „๋‹ฌํ•ด ์ˆ˜ ์žˆ๋‹ค.
  • ๊ตฌ๋…์ž๋Š” ์žก์ง€ํšŒ์‚ฌ๋ฅผ subscribe๋งŒ ํ•˜๊ณ  ์žˆ๋‹ค. (UI)
  • ์‹ ๊ทœ ์žก์ง€๊ฐ€ ๋ฐœ์ƒ๋˜๋ฉด publishํ•ด์„œ ๋ณด๋‚ด์ค€๋‹ค. (๋„๋ฉ”์ธ)

Sale : Publisher (๋„๋ฉ”์ธ)
SaleFrame : Subscriber (UI) โ€Sale์€ SaleFrame์„ ๋‹จ์ˆœํžˆ ๋ฆฌ์Šค๋„ˆ๋กœ๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค.โ€

[์ž˜๋ชป๋œ ์ƒํ™ฉ]
ํŒ๋งค ์ด์•ก์ด ๋ณ€ํ•˜๋ฉด Sale์ด GUIํ™”๋ฉด์— ๋ณ€ํ•œ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.
โ†’ ์ด๋Š” ๋„๋ฉ”์ธ์ด UI๋ฅผ ์•Œ๊ณ ์žˆ์–ด์•ผ๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Low copling ์œ„๋ฐฐ, ๊ด€์‹ฌ๋ถ„๋ฆฌ ์œ„๋ฐฐ

[์˜ณ์€ ์ƒํ™ฉ]
ํŒ๋งค์ด์•ก์ด ๋ณ€ํ•˜๋ฉด ๋„๋ฉ”์ธ์ด ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , UI์— ์„ค์ •๋œ ๊ฐ’์„ ๋ณด๋‚ด์ฃผ๊ธฐ๋งŒ ํ•œ๋‹ค.
โ†’ ์ฆ‰, Sale์€ ๋ช‡ ๊ฐœ์˜ Subscriber๊ฐ€ ์žˆ๋Š”์ง€, ํ•ด๋‹น ์ •๋ณด๋กœ ๋ฌด์Šจ ์ง“์„ํ•˜๋Š”์ง€ ์•Œ๋น ๊ฐ€ ์•„๋‹ˆ๋‹ค.
โˆด ๋‹คํ˜•์„ฑ(polymorphism)๊ณผ ๋ณ€ํ™” ๋ณดํ˜ธ(protected variation)ํŒจํ„ด๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค.

์–ด๋–ป๊ฒŒ ํ˜๋Ÿฌ๊ฐ€๋Š”๊ฐ€?

  1. subscriber์ธ SaleFrame์ด swing๊ณผ Listener ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†
  2. initialize(์ดˆ๊ธฐํ™”)์—์„œ sale.addPropertyListener๋ฅผ ํ†ตํ•˜์—ฌ ๋ฆฌ์Šค๋„ˆ์— ๊ตฌ๋… ๋“ฑ๋ก ์š”์ฒญ
  3. publisher์ธ Sale์ด ํ•ด๋‹น ๋ฆฌ์Šค๋„ˆ๋ฅผ ๊ตฌ๋… ๋ชฉ๋ก์— ๋“ฑ๋ก
  4. SetTotal๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋“ฑ๋ก๋œ propertylistener์ธ SaleFrame์—๊ฒŒ ๊ฐ’์„ ์ „๋‹ฌํ•ด์คŒ.
  5. saleFrame์€ ๋ฐ›์€ ๊ฐ’์„ ํ…์ŠคํŠธ๋“ , ๊ทธ๋ž˜ํ”„๋“  ์•Œ์•„์„œ ์‚ฌ์šฉ
profile
๋ถ‰์€ ๋ฐฐ ์˜ค์ƒ‰ ๋”ฑ๋‹ค๊ตฌ๋ฆฌ ๊ฐœ๋ฐœ์ž ๐ŸฆƒCloud & DevOps

0๊ฐœ์˜ ๋Œ“๊ธ€