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 (์์ง๋. ํ ๊ฐ์ฒด๊ฐ ํ๊ฐ์ง์ ์ฑ
์๋ง์ ํ๋ค.)

์์ : ์ด๋ค ํด๋์ค๊ฐ 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. ํ์ํ ๊ฒ๋ง ์ ์ ๋ผ์ธ์ด ํ์ํ๋ค. ์ด๊ธฐํ ๋ํ ์ฑ
์ ํ ๋น์ ์์น์ ๋ฐ๋ฅธ๋ค.