๐ŸŽซ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ part17~18. grasp ์ฑ…์ž„์„ ์ด์šฉํ•œ ๊ฐ์ฒด ์„ค๊ณ„

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

๐Ÿ”„ Software engineering

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

Grasp์ด๋ž€?

๋ถ„์„์ด ๋๋‚˜๊ณ  ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ์ด๋Ÿฌํ•œ ๋…ธํ•˜์šฐ๋ฅผ ์ •๋ฆฌํ•ด ๋†“์€ ๊ฒƒ์ด grasp!

UML๊ณผ ์„ค๊ณ„ ์›์น™

  • UML์˜ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์ž˜ ์•ˆ๋‹ค๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ์  ์„ค๊ณ„๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค!
  • ์ฑ…์ž„์„ ์ด์šฉํ•˜์—ฌ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
  • ๋ถ„์„ ๋‹จ๊ณ„๊ฐ€ ๋๋‚ฌ์„ ๋•Œ ๊ฐ์ฒด ์„ค๊ณ„๋ฅผ ์œ„ํ•œ UML ๋ชจ๋ธ๋ง (์ธํ„ฐ๋ ‰์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ)์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    ์ธํ„ฐ๋ ‰์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆด ๋•Œ๊ฐ€ ๋ฐ”๋กœ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋Š” ์‹œ๊ฐ„์ด๋‹ค.
    ํ•ด๋‹น ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•  ์ ํ•ฉํ•œ ๋‹ด์žฅ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด ํ• ๋‹นํ•˜๊ณ , ์—†์œผ๋ฉด ์ ํ•ฉํ•œ ๋‹ด๋‹น์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

Modeling Day์—๋Š” ๋ฌด์—‡์„ ํ•ด์•ผํ•˜๋Š”๊ฐ€?

  • Grasp๊ณผ GoF ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ…์ž„์ฃผ๋„ ์„ค๊ณ„๋ฅผ ํ•œ๋‹ค.
  • ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ๊ฒƒ์€ ์˜คํผ๋ ˆ์ด์…˜ ์•ฝ์ •์ด๋ฉฐ, ์—†์œผ๋ฉด SSD์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ฑ…์ž„ ์ฃผ๋„ ์„ค๊ณ„(RDD) : RDD๋Š” ๋ฉ”ํƒ€ํฌ์–ด์ด๋‹ค. (โ€œ๊ฐ์ฒด๋ฅผ ์‚ฌ๋žŒ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹คโ€)

  • ์ฑ…์ž„(๋ฌผํ’ˆ์„ ํ”„๋žœ์ฐจ์ด์ฆˆ์— ๊ณต๊ธ‰ํ•  ์ฑ…์ž„), ์—ญํ• (๋ฌผํ’ˆ์„ ๊ณต๊ธ‰), ํ˜‘๋ ฅ(๊ณต๊ธ‰ํ•  ๋ฌผํ’ˆ์„ ์ œ์ž‘)

Grasp (General Responsibility Assignment Software Pattern)

  • ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ๋””์ž์ธ ํŒจํ„ด
  • Grasp์„ ํ•œ๋‹จ์–ด๋กœ ํ‘œํ˜„ํ•˜๋ฉด? ์ดํ•ดํ•˜๋‹ค.

CRC

"Class - Responsibility - collaborator"(๊ฐ์ฒด - ์ฑ…์ž„ - ๊ณต๋™ ์ž‘์—…์ž)์˜ ์•ฝ์ž

ํŒจํ„ด์ด๋ž€?

  • Pattern Name / Problem / Solution ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

    ํŒจํ„ด์˜ ์ด๋ฆ„์˜ ํ•ด์„

Data Mapper

  • ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์ด DB๋ฅผ ์ดํ•ดํ•˜๊ณ , SQL ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ์ฆ‰ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • dada mapper์—์„œ SQL๋ฌธ์žฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ DB์—์„œ ์ฐพ์•„ ๋„๋ฉ”์ธ์— ๋ฐ˜ํ™˜ ํ•ด์ฃผ๋Š” ๊ฒƒ.
  • ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด์™€ DB์‚ฌ์ด์— ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ mapper์ด๋‹ค.

GoF ํŒจํ„ด

  • 4๋ช…์˜ ๊ฐฑ๋“ค์ด ๋งŒ๋“  ๋””์ž์ธ ํŒจํ„ด

Grasp์„ ์ด์šฉํ•œ ๊ฐ์ฒด ์„ค๊ณ„์˜ ํŒจํ„ด 5๊ฐœ

  • Creator (๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ์ฑ…์ž„)
  • Information Expert (ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์—ฌ์•ผ ํ•œ๋‹ค.)
  • Low Coupling (์ปคํ”Œ๋ง-์—ฐ๊ฒฐ์„ฑ์ด ์ด ์ž‘์•„์•ผ ํ•œ๋‹ค.)
  • Controller (์ปจํŠธ๋กค ํ•ด์คŒ)
  • High Cohesion (์‘์ง‘๋„. ํ•œ ๊ฐ์ฒด๊ฐ€ ํ•œ๊ฐ€์ง€์˜ ์ฑ…์ž„๋งŒ์„ ํ•œ๋‹ค.)

Information Expert ํŒจํ„ด์˜ ์˜ˆ์ œ

์˜ˆ์ œ : ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ Sale์˜ ์ด์•ก์„ ์•Œ ํ•„์š”๊ฐ€ ์žˆ๋Š”๊ฐ€? โ†’ Sale

  • ๋ฌธ์ œ : sale์˜ ์ด์•ก์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€? (๊ฐ€์žฅ๋จผ์ € ํ•„์š”ํ•œ ๊ณ ๋ ค์‚ฌํ•ญ)
  • ํ•ด๊ฒฐ์ฑ… : sale์˜ ์ด์•ก์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด์—๊ฒŒ ํ• ๋‹นํ•œ๋‹ค.

Information Expert๋ฅผ ์ ์šฉํ•˜๋ฏ€๋กœ์จ, getTotal์„ ํ˜ธ์ถœํ•˜๋Š” Sale์ด ํ•ด์ฃผ์–ด์•ผํ•˜๋Š” ์ผ์ด ๋ถ„์‚ฐ๋˜์—ˆ๋‹ค. ์ฆ‰, ๊ฐ ์ •๋ณด๋ฅผ ๊ฐ€์žฅ ์ž˜ ์•Œ๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋“ค์—๊ฒŒ ์ฑ…์ž„์ด ๋ถ„์‚ฐ๋˜์—ˆ๋‹ค.

์ถ”๊ฐ€์ ์ธ ๋…ผ์˜

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง(๋„๋ฉ”์ธ ๋กœ์ง)๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ์ง์„ ๋‹ค๋ฅธ ๊ณณ์— ์œ„์น˜. (์ฑ…์ž„์„ ๋ถ„์‚ฐ)

Creator ํŒจํ„ด

  • ์ง์ ‘ ๋งŒ๋“ค์ง€ ๋ง๊ณ , ์ƒ์„ฑ์„ ์œ„์ž„ํ•  ๊ฐ์ฒด๋ฅผ ์ฐพ์œผ๋ผ๋Š” ์˜๋ฏธ
    SaleLineitem ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฑ…์ž„์€ ๋ˆ„๊ฐ€ ๊ฐ€์ง€๋Š”๊ฐ€? Sale

ํ•ต์‹ฌ

  • ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ์—ฐ๊ด€์ด ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์ž๋กœ ์„ ํƒํ•˜์—ฌ ์ปคํ”Œ๋ง์„ ๋‚ฎ์ถ˜๋‹ค.
  • ๋ณต์žกํ•œ ๊ณผ์ •์ด ํ•„์š”ํ• ๋•Œ๋Š” Factory๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (์ƒ์„ฑ์„ ์™ธ์ฃผ ๋งก๊น€)

Controller Pattern

  • UI ๊ณ„์ธต์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋จผ์ € ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›๋Š” ๊ณ„์ธต์ด๋‹ค.
  • ์ฆ‰, UI๋กœ ๋ถ€ํ„ฐ ์˜ค๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›๋Š” ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

MVC ๋ชจ๋ธ

์‚ฌ์šฉํ•˜๋Š” ์ด์œ  : ๋ชจ๋ธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๊ฐ์ž์˜ ์—ญํ• ์—๋งŒ ์ถฉ์‹คํ•˜๋„๋ก ๋งŒ๋“ค์–ด, ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๊ณ , ๋†’์€ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง„๋‹ค.

Controller๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์‹œ์Šคํ…œ ์—ฐ์‚ฐ์ด ๋งŽ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํ•˜๋‚˜๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” Facade Controller๋ฅผ ์‚ฌ์šฉ
  • ์‹œ์Šคํ…œ ์—ฐ์‚ฐ์ด ๋งŽ์€ ๊ฒฝ์šฐ, Usecase Controller๋ฅผ ์‚ฌ์šฉ
  • ์ปจํŠธ๋กค๋Ÿฌ์— ๋งŽ์€ ์ฑ…์ž„์ด ๋ถ€์—ฌ๋˜๋ฉด high cohesion์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

Low Coupling Pattern

  • Payment ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด ์ธ์Šคํ„ด์Šค๋ฅผ Sale์— ์—ฐ๊ด€์‹œํ‚ฌ ๋•Œ, ์ด ์ผ์„ ๋ˆ„๊ฐ€ํ•˜๋Š”๊ฐ€?
  • ๋‘˜ ๋‹ค ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ Sale์ด ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (๋” ๋‚ฎ์€ ์ปคํ”Œ๋ง)

java.util์€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฐ์ฒด์™€ ๊ฒฐํ•ฉ์„ ๊ฐ€์ง„๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€์•Š๋Š” ์ด์œ ๋Š”?
โ†’ ๋ณ€ํ™”๊ฐ€ ์ž˜ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ์•ˆ์ •๋œ ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

High Cohesion (๋†’์€ ์‘์ง‘๋„)ํŒจํ„ด

  • Payment ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ Sale๊ณผ ์—ฐ๊ด€์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์–ด๋–ค ํด๋ž˜์Šค์— ํ• ๋‹นํ•ด์•ผ ํ•˜๋Š”๊ฐ€? โ†’ Sale์—๊ฒŒ ์ฑ…์ž„์„ ํ• ๋‹นํ•œ๋‹ค.
  • Register์— ํ• ๋‹นํ•  ์‹œ, ์ผ๋‹จ low coupling์ด ๋ฐœ์ƒํ•˜๊ณ  Register๊ฐ€ Domain Logic์˜ ์ผ๋˜ํ•œ ์ž๊ธฐ๊ฐ€ ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์‘์ง‘๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค.

์ด ๋ช‡๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๊ฐ€?

  • ๋“ค์–ด์˜ค๋Š” ๊ฑด ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ Sale(2), ๋‚˜๊ฐ€๋Š” ์—ฐ๊ด€ ์ด (2)๊ฐœ๋กœ 4๊ฐœ์ด๋‹ค.

์ดˆ๊ธฐํ™”์™€ Start up usecae

Q. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ, ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ผ์ธ์ด ํ•„์š”ํ•œ๊ฐ€?
A. ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์ ์€ ๋ผ์ธ์ด ํ•„์š”ํ•˜๋‹ค. ์ดˆ๊ธฐํ™” ๋˜ํ•œ ์ฑ…์ž„ ํ• ๋‹น์˜ ์›์น™์„ ๋”ฐ๋ฅธ๋‹ค.

profile
๋ถ‰์€ ๋ฐฐ ์˜ค์ƒ‰ ๋”ฑ๋‹ค๊ตฌ๋ฆฌ ๊ฐœ๋ฐœ์ž ๐ŸฆƒCloud & DevOps

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