GRASP Pattern์ด๋ž€?

  • General Responsibility Assignment Software Patterns
  • Object-Oriented ๋””์ž์ธ์˜ ํ•ต์‹ฌ์€ ๊ฐ ๊ฐ์ฒด์— ์ฑ…์ž„์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ.
  • ์ฑ…์ž„์„ ๋ถ€์—ฌํ•˜๋Š” ์›์น™๋“ค์„ ๋งํ•˜๊ณ  ์žˆ๋Š” ํŒจํ„ด.
  • ๊ตฌ์ฒด์ ์ธ ๊ตฌ์กฐ๋Š” ์—†์ง€๋งŒ, ์ฒ ํ•™์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด 9๊ฐ€์ง€์˜ ์›์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Information Expert

  • ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์— ์ฑ…์ž„์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ.
  • ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ์™€ ์ฒ˜๋ฆฌ๋กœ์ง์ด ํ•จ๊ป˜ ๋ฌถ์—ฌ ์žˆ๋Š” ๊ฒƒ.
  • ์ •๋ณด ์€๋‹‰์„ ํ†ตํ•ด ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ถ”๊ณ  ์˜ค์ง Method๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์™ธ๋ถ€์—๋Š” ๊ทธ ๊ธฐ๋Šฅ(์ฑ…์ž„)๋งŒ์„ ์ œ๊ณตํ•œ๋‹ค.

Creator

  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ์€ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ปจํ…์ŠคํŠธ๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์— ๋ถ€์—ฌ.
  • A ๊ฐ์ฒด์™€ B ๊ฐ์ฒด์˜ ๊ด€๊ณ„์˜ ๊ด€๊ณ„๊ฐ€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ผ๋ฉด A์˜ ์ƒ์„ฑ์„ B์˜ ์ฑ…์ž„๋กœ ๋ถ€์—ฌ.
    • B ๊ฐ์ฒด๊ฐ€ A ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
    • B ๊ฐ์ฒด๊ฐ€ A ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์žˆ๋‹ค.
    • A ๊ฐ์ฒด๊ฐ€ B ๊ฐ์ฒด์˜ ์ผ๋ถ€์ด๋‹ค.
    • B ๊ฐ์ฒด๊ฐ€ A ๊ฐ์ฒด๋ฅผ ๊ธด๋ฐ€ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
    • B ๊ฐ์ฒด๊ฐ€ A ๊ฐ์ฒด์˜ ์ƒ์„ฑ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • Factory Pattern

Controller

  • ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ(์‚ฌ์šฉ์ž์˜ ์š”์ฒญ)๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ž.
  • ๋งŒ์•ฝ ์–ด๋–ค ์„œ๋ธŒ์‹œ์Šคํ…œ์•ˆ์— ์žˆ๋Š” ๊ฐ ๊ฐ์ฒด์˜ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด?
    • ์ง์ ‘์ ์œผ๋กœ ๊ฐ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์„œ๋ธŒ์‹œ์Šคํ…œ๊ณผ ์™ธ๋ถ€๊ฐ„์˜ Coupling์ด ์ฆ๊ฐ€๋˜๊ณ 
    • ์„œ๋ธŒ์‹œ์Šคํ…œ์˜ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ, ์™ธ๋ถ€์— ์ฃผ๋Š” ์ถฉ๊ฒฉ์ด ํฌ๊ฒŒ ๋œ๋‹ค.
    • ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ์ž…์žฅ์—์„œ ๋ณด๋ฉด, ์ด Controller ๊ฐ์ฒด๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋‹ค.

Low Coupling

  • ๊ฐ์ฒด๋“ค๊ฐ„, ์„œ๋ธŒ ์‹œ์Šคํ…œ๋“ค๊ฐ„์˜ ์ƒํ˜ธ์˜์กด๋„๊ฐ€ ๋‚ฎ๊ฒŒ ์ฑ…์ž„์„ ๋ถ€์—ฌ.
  • Low Coupling์€ ๊ฐ ๊ฐ์ฒด, ์„œ๋ธŒ์‹œ์Šคํ…œ์˜ ์žฌ ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์— ํŽธํ•˜๊ฒŒ ํ•œ๋‹ค.
  • Object-Oriented ์‹œ์Šคํ…œ์€ ๊ฐ ๊ฐ์ฒด๋“ค๊ฐ„์˜ Communication์„ ํ†ตํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์™„์„ฑ์‹œํ‚ด.
    • ๊ฐ ๊ฐ์ฒด๋“ค ์‚ฌ์ด์— Coupling์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋Š” ์—†๋‹ค.

์ด ํŒจํ„ด์€ ์š”๊ตฌ์‚ฌํ•ญ์€ ์ถฉ์กฑ์‹œํ‚ค๋ฉด์„œ๋„ ๊ฐ ๊ฐ์ฒด๋“ค, ๊ฐ ์„œ๋ธŒ์‹œ์Šคํ…œ ๊ฐ„์˜ Coupling๋ฅผ ๋‚ฎ์€ ์ˆ˜์ค€์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋””์ž์ธ.

High Cohesion

  • ๊ฐ ๊ฐ์ฒด๊ฐ€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋œ ์ฑ…์ž„๋“ค๋งŒ ๊ฐ€์ง€๋„๋ก ๊ตฌ์„ฑ.
  • ํ•œ ๊ฐ์ฒด, ํ•œ ์‹œ์Šคํ…œ์ด ์ž๊ธฐ ์ž์‹ ์ด ๋ถ€์—ฌ๋ฐ›์€ ์ฑ…์ž„๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์งœ์ž„์ƒˆ ์žˆ๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋ฉด?
    • ์ž์‹ ์ด ๋ถ€์—ฌ ๋ฐ›์€ ์ฑ…์ž„์„ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋‚˜ ์‹œ์Šคํ…œ์„ ์ฐธ์กฐํ•˜๋Š” ์ผ์ด ์ ์œผ๋ฉฐ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ Low Coupling์ด ๋œ๋‹ค.

Polymorphism

  • ๊ฐ์ฒด์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํ–‰๋™์–‘์‹์ด ๋ฐ”๋€๋‹ค๋ฉด, Polymorphism ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ž.
  • ๋งŒ์•ฝ ๊ฐ์ฒด์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํ–‰๋™์ด ๋ฐ”๋€๋‹ค๋ฉด ๊ฐ์ฒด์˜ ์ข…๋ฅ˜๋ฅผ ์ฒดํฌํ•˜๋Š” ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ 
    • Object-Oriented ์‹œ์Šคํ…œ์˜ Polymorphism ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ผ.

Pure Fabrication

  • ๋„๋ฉ”์ธ์— ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ธฐ๋Šฅ์ ์ธ ์ฑ…์ž„์„ ๋ณ„๋„๋กœ ํ•œ ๊ณณ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ž.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ๋กœ๊ทธ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์ฑ…์ž„์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด์ž. ๊ฐ ์ •๋ณด๋Š” ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.
    • Information Expert ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด?
      • ๊ฐ ๊ฐ์ฒด๋“ค์ด ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ , ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์ฑ…์ž„์„ ๋‹ด๋‹นํ•ด์•ผ ํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ์—†๋‹ค.
  • ์‹œ์Šคํ…œ ์ „๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด?
    • ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    • ์ฆ‰ Low Coupling์˜ ์›์น™์ด ๊นจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.
      • ์ด๋Ÿด ๊ฒฝ์šฐ์—๋Š” ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ฑ…์ž„์„ ํ•œ ๊ณณ์œผ๋กœ ๋ชจ์•„์„œ ๊ฐ€์ƒ์˜ ๊ฐ์ฒด, ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด๋ผ.

Indirection

  • ๋‘ ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ง์ ‘์ ์ธ Coupling์„ ํ”ผํ•˜๊ณ  ์‹ถ์œผ๋ฉด, ๊ทธ ์‚ฌ์ด์— ๋‹ค๋ฅธ ๋งค๊ฐœ์ฒด๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ.
  • ์ฃผ๋กœ ๋‹ค๋ฅธ ๋งค๊ฐœ์ฒด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
    • ๊ทธ๋Ÿฐ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋Š” ์•„๋ž˜์— ์„ค๋ช…๋œ Protected Variations ํŒจํ„ด์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

Protected Variations

  • ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ๊ณณ์— ์•ˆ์ •๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜์ž.

์ƒ๊ฐ ์ •๋ฆฌ

  • Refactoring์—์„œ ๋งŽ์ด ๋ฐฐ์šด ๊ธฐ๋ฒ•๋“ค์ด GRASP Pattern์„ ์ž˜ ์ง€ํ‚ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด์ธ๋‹ค.

Reference