OOPDesign

๐Ÿ“Œ General Responsibility Assignment Software Pattern, ๊ฐ์ฒด ์„ค๊ณ„์— ๋Œ€ํ•œ 9๊ฐ€์ง€ ์›์น™

Information Expert Pattern

๐Ÿ“Œ ๋ˆ„๊ตฌ์—๊ฒŒ ํŠน์ • ์ฑ…์ž„์„ ๋ถ€์—ฌํ• ์ง€?
= ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด

Creator Pattern

๐Ÿ“Œ ๊ฐ์ฒด A๋ฅผ ๋ˆ„๊ฐ€ ์ƒ์„ฑํ• ์ง€?
= A๋ฅผ ํฌํ•จํ•˜๋Š”/(Shared) Aggregation (์ง‘ํ•ฉ)ํ•˜๋Š” B
= A๋ฅผ ๊ธฐ๋กํ•˜๋Š”/๋ฐ€์ ‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”/์ดˆ๊ธฐ๊ฐ’์„ ๊ฐ–๋Š” B
๐Ÿ”Ž Abstract Factory, Singleton

  • ์ƒํ™ฉ
    1. ๐Ÿšซ ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ๋ณด๋‹ค ์žฌํ™œ์šฉ์ด ํ•„์š”ํ•  ๋•Œ
    2. ๐Ÿšซ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค ํƒ€์ž… ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ ์ƒ์„ฑํ•ด์•ผ ํ•  ๋•Œ
    3. ๐Ÿšซ ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์‰ฝ๊ฒŒ ๊ฐˆ์•„๋ผ์›Œ์•ผ ํ•  ๋•Œ โžก Dependency Injection (์˜์กด์„ฑ ์ฃผ์ž…)
  • โค๏ธ Low Coupling (๊ฒฐํ•ฉ๋„)

Controller Pattern

๐Ÿ“Œ UI์˜ ์œ ์ € ์ธํ’‹์„ ์‘์šฉ ๋กœ์ง์œผ๋กœ ์ „๋‹ฌํ•˜๋Š”
= ์˜ต์…˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜ ํƒ 1

  1. (Sub) System์„ ๋Œ€ํ‘œํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด ์ƒ์„ฑ
  2. Use Case ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ผ

Low Coupling (๊ฒฐํ•ฉ๋„) Pattern

๐Ÿ“Œ ์„œ๋กœ ๋‹ค๋ฅธ ๋Œ€์•ˆ ์ค‘ ์–ด๋–ค ๊ฑธ ์„ ํƒํ• ์ง€?
= Coupling (๊ฒฐํ•ฉ๋„)์ด ๋‚ฎ์•„์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฑ…์ž„ ๋ถ€์—ฌ
= โญ ๊ผญ ํ•„์š”ํ•œ Link๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ์ฒ˜๋ฆฌ Delegation (์œ„์ž„)

  • ์ƒํ™ฉ: ๐Ÿšซ ๋ณ€ํ™”๊ฐ€ ๊ฑฐ์˜ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๋•Œ
    • ๐Ÿ”Ž Java Library ๋“ฑ, ์‘์šฉ ๋‹จ์—์„œ ๋งŒ๋“  Class๊ฐ€ ์•„๋‹Œ ๊ฒƒ๋“ค

High Cohesion (์‘์ง‘๋„) Pattern

๐Ÿ“Œ ์„œ๋กœ ๋‹ค๋ฅธ ๋Œ€์•ˆ ์ค‘ ์–ด๋–ค ๊ฑธ ์„ ํƒํ• ์ง€?
= Cohesion (์‘์ง‘๋„)์ด ๋†’์•„์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฑ…์ž„ ๋ถ€์—ฌ
= โญ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์ฑ…์ž„์ด ์ถ”๊ฐ€๋  ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” Class์˜ ๊ฒฝ์šฐ, Interface ์—ญํ• ๋งŒ ๋งก๊ณ  ์ฑ…์ž„์ด ์ ์–ด์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ

Polymorphism (๋‹คํ˜•์„ฑ) Pattern

๐Ÿ“Œ ํƒ€์ž…์— ๋”ฐ๋ผ ํ–‰๋™์ด ๋‹ฌ๋ผ์งˆ ๋•Œ, ๋ˆ„๊ตฌ์—๊ฒŒ ์ฑ…์ž„์„ ๋ถ€์—ฌํ• ์ง€?
= Polymorphism (๋‹คํ˜•์„ฑ) OP ํ™œ์šฉ โžก ์™ธ๋ถ€์—์„œ ๋ณด์ด๋Š” Interface๋Š” ๊ฐ™๋˜, ๋™์ž‘ ๋‹ค๋ฅด๋„๋ก

  • ์ƒํ™ฉ
    1. ๋น„์Šทํ•œ ๋ณ€์ข…๋“ค์„ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ์ง€ ๊ณ ๋ฏผํ•  ๋•Œ
    2. โญ๐Ÿšซ Future Proofing, ๋ฏธ๋ฆฌ ํ™•์žฅ๋  ๋ฏธ๋ž˜๋ฅผ ์˜ˆ๊ฒฌํ•˜์—ฌ ํ•˜๋Š” ๊ฒƒ์€ ๊ดœํ•œ Cost
  • โค๏ธ ์žฅ์ 
    1. Reliable (์‹ ๋ขฐ์„ฑ)
    2. ์ƒˆ ์„ ํƒ์ง€ ์ถ”๊ฐ€ ์‹œ ๊ธฐ์กด ๋กœ์ง์— ์˜ํ–ฅ ์ฃผ์ง€ ์•Š์Œ โ†” if, switch
  • ๐Ÿ’” ๋‹จ์ 
    1. ๋‹จ์ #ํด๋ž˜์Šค ํญ๋ฐœ
    2. Less Readability (๊ฐ€๋…์„ฑ)

Pure Fabrication Pattern

๐Ÿ“Œ Low Coupling (๊ฒฐํ•ฉ๋„), High Cohesion (์‘์ง‘๋„)์„ ์œ„๋ฐ˜ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ, ๋ˆ„๊ตฌ์—๊ฒŒ ์ฑ…์ž„์„ ๋ถ€์—ฌํ• ์ง€?
๐Ÿ“Œ ์ˆœ์ˆ˜ํ•œ ๊ฒƒ์„ ๋งŒ๋“ค์–ด ๋‚ด๋‹ค
= Separation of Concerns (๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ)
= โญ Domain์—๋Š” ์—†๋˜ ๊ฐ€์ƒ์˜, ํŽธ์˜๋ฅผ ์œ„ํ•œ Behavior Class ์ƒ์„ฑ

  • ์ƒํ™ฉ: ๋น„์Šทํ•œ ๋กœ์ง์ด Information Expert ์›์น™ ๋“ฑ์— ์˜ํ•ด ์—ฌ๋Ÿฌ ๊ณณ์— ๋ถ„์‚ฐ โžก Low Cohesion (์‘์ง‘๋„)์ผ ๋•Œ
  • โค๏ธ ๋™์ผ ๋กœ์ง์— ๋Œ€ํ•œ ๋ณต์‚ฌ๋ณธ ๊ฐ์†Œ โžก Reusability (์žฌ์‚ฌ์šฉ์„ฑ)

Indirection Pattern

๐Ÿ“Œ Direct Coupling (๊ฒฐํ•ฉ๋„)์„ ์ค„์ด๊ธฐ ์œ„ํ•ด, ๋ˆ„๊ตฌ์—๊ฒŒ ์ฑ…์ž„์„ ๋ถ€์—ฌํ• ์ง€?
= โญ **Intermediate ๊ฐ์ฒด = ์ค‘๊ฐ„ Interface**๋ž‘๋งŒ Coupling (๊ฒฐํ•ฉ๋„)์„ ๋งบ๋„๋ก ํ•จ
๐Ÿ”Ž Adapter, Facade (ํผ์‚ฌ๋“œ), Proxy, Mediator

PV (Protected Variations Pattern)

๐Ÿ“Œ ๋‹ค์–‘์„ฑ/๋ณ€ํ™”๊ฐ€ ๋‹ค๋ฅธ Element์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ธฐ ์œ„ํ•ด, ๋ˆ„๊ตฌ์—๊ฒŒ ์ฑ…์ž„์„ ๋ถ€์—ฌํ• ์ง€?
= ๊ธฐ์กด ๋กœ์ง/๋””์ž์ธ์— ๋ณ€ํ™”๋ฅผ ์ฃผ์ง€ ์•Š๋„๋ก, ๋‹ค์–‘์„ฑ/๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ ์ง€์ ์„ ์˜ˆ์ธกํ•˜์—ฌ ์•ˆ์ •์ ์ธ Interface๋ฅผ ํ†ตํ•ด ํฌ์žฅ
= OCP (Open Close Principle)

  • โค๏ธ ์žฅ์ 
    1. Flexibility (์œ ์—ฐ์„ฑ), ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™”๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Œ
    2. ๋” ๊ตฌ์กฐํ™”๋œ ๋””์ž์ธ ์ œ๊ณต โžก Maintainability (์œ ์ง€๋ณด์ˆ˜์„ฑ) ์‹œ ๊ธฐ์กด ๋””์ž์ธ์ด ์œ ์ง€๋  ๊ฐ€๋Šฅ์„ฑ ๋” ๋†’์Œ