GRASP Pattern
๊ฐ์ฒด์งํฅ ์ค๊ณ์์ ์ฐ๋ฆฌ๋ ํญ์ โ์ด ์ฑ ์์ ๋๊ฐ ๊ฐ์ ธ์ผ ํ ๊น?โ ๋ผ๋ ์ง๋ฌธ์ ์ง๋ฉดํ๊ฒ ๋๋ค.
GRASP(General Responsibility Assignment Software Patterns) ํจํด์ Craig Larman์ด ์ ์ํ ์ฑ ์ ํ ๋น ๊ธฐ๋ฒ์ผ๋ก, ์ด 9๊ฐ์ง ํจํด์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ฐ ํจํด์ ๋ค์๊ณผ ๊ฐ๋ค.
Information expert
์ฑ ์์ ์ ๋ณด ์ ๋ฌธ๊ฐ, ์ฆ, ์ฑ ์์ ์ํํ๋ ๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด์๊ฒ ํ ๋นํ๋ผ.
์ฑ ์์ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ฅ ์ ์๊ณ ์๋ ๊ฐ์ฒด์๊ฒ ํ ๋นํจ์ผ๋ก์จ ๊ฐ์ฒด๊ฐ ์์จ์ ์ธ ์กด์ฌ์ฌ์ผ ํ๋ค๋ ์ฌ์ค์ ๋ค์ ํ๋ฒ ์๊ธฐ์ํจ๋ค.
์ ๋ณด๋ฅผ ์๊ณ ์๋ ๊ฐ์ฒด๋ง์ด ์ฑ ์์ ์ด๋ป๊ฒ ์ํํ ์ง ์ค์ค๋ก ๊ฒฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
Information expert ํจํด์ ๋ฐ๋ฅด๋ฉด ์ ๋ณด์ ํ๋์ ์ต๋ํ ๊ฐ๊น์ด ๊ณณ์ ์์น์ํค๊ธฐ ๋๋ฌธ์ ์บก์ํ๋ฅผ ์ ์งํ ์ ์๋ค.
ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ค๋ก ์ฑ ์์ด ๋ถ์ฐ๋๊ธฐ ๋๋ฌธ์ ๋ ์์ง๋ ฅ ์๊ณ , ์ดํดํ๊ธฐ ์ฌ์์ง๋ค.
๋ฐ๋ผ์ ๋์ ์์ง๋๊ฐ ๊ฐ๋ฅํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ ธ์ ๊ฐ๊ฒฐํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์์คํ ์ ๊ตฌ์ถํ ์ ์๋ค.
Creator
๊ฐ์ฒด๋ฅผ ์์ฑํ ์ฑ ์์ ๋๊ฐ ๊ฐ์ ธ์ผํ ๊น? ์์ฑ๋๋ ๊ฐ์ฒด์ ์ปจํ ์คํธ๋ฅผ ์๊ณ ์๋ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด, ์ปจํ ์คํธ๋ฅผ ์๊ณ ์๋ ๊ฐ์ฒด์ ๋ถ์ฌํ์.
์๋ ์กฐ๊ฑด์ ์ต๋ํ ๋ง์ด ๋ง์กฑํ๋ B์๊ฒ ๊ฐ์ฒด ์์ฑ ์ฑ ์์ ํ ๋นํ๋ผ.
- B๊ฐ A ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ฑฐ๋ ์ฐธ์กฐํ๋ค.
- B๊ฐ A ๊ฐ์ฒด๋ฅผ ๊ธฐ๋กํ๋ค.
- B๊ฐ A ๊ฐ์ฒด๋ฅผ ๊ธด๋ฐํ๊ฒ ์ฌ์ฉํ๋ค.
- B๊ฐ A ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค(์ด ๊ฒฝ์ฐ B๋ A์ ๋ํ ์ ๋ณด ์ ๋ฌธ๊ฐ๋ค)
Creator ํจํด์ ์๋๋ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์์ฑ๋๋ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋๊ฑฐ๋ ๊ด๋ จ๋ ํ์๊ฐ ์๋ ๊ฐ์ฒด์ ํด๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ฑ ์์ ๋งก๊ธฐ๋ ๊ฒ์ด๋ค.
์์ฑ๋ ๊ฐ์ฒด์ ๋ํด ์ ์๊ณ ์์ด์ผ ํ๊ฑฐ๋ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฐ์ฒด๋ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์์ฑ๋ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ ๊ฒ์ด๋ค.
๋ค์ ๋งํด์ ๋ ๊ฐ์ฒด๋ ์๋ก ๊ฒฐํฉ๋๋ค.
์ด๋ฏธ ๊ฒฐํฉ๋ผ ์๋ ๊ฐ์ฒด์๊ฒ ์์ฑ ์ฑ ์์ ํ ๋นํ๋ ๊ฒ์ ์ค๊ณ์ ์ ์ฒด์ ์ธ ๊ฒฐํฉ๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก CREATOR ํจํด์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ค๊ณ๊ฐ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ ์ ์๊ฒ ํ๋ค.
Controller
์์คํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์ฑ ์์ ์์คํ ์ ๊ฒฝ๊ณ์ ์๋ ๊ฐ์ฒด์ ํ ๋นํ๋ผ.
Controller ํจํด์ ์ฌ์ฉ์์ ์ ๋ ฅ์ด๋ ์ธ๋ถ ์์คํ ์ผ๋ก๋ถํฐ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ๊ฐ์ฒด๋ฅผ ์ ํํ ๋ ์ฌ์ฉํ๋ ์ฑ ์ ํ ๋น ์ง์นจ์ด๋ค.
์์คํ ๊ฒฝ๊ณ์ ์์นํ ๊ฐ์ฒด๋ ๋ค์ ์ค ํ๋๋ก ๊ตฌ์ฑ๋ ์ ์๋ค:
- UI Layer์ ๋๋ฉ์ธ ๋ก์ง ์ฌ์ด์ ์์นํ ๊ฐ์ฒด (์: ApplicationService, Facade)
- ์ ์ค์ผ์ด์ค๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
Controller๋ ์ฌ์ฉ์์ ์์ฒญ์ ํด์ํ๊ณ ๊ทธ ์์ฒญ์ ์ํํ๊ธฐ ์ํด ํ์ํ ๋๋ฉ์ธ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค.
๋น์ฆ๋์ค ๋ก์ง์ ์ง์ ์ฒ๋ฆฌํ์ง ์๊ณ , ์ฑ ์์ ๋๋ฉ์ธ ๊ฐ์ฒด๋ก ์์ํ๋ ๊ตฌ์กฐ๋ฅผ ํตํด ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ์ ์งํ๊ณ , UI์ ๋๋ฉ์ธ ๊ณ์ธต ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก Controller๋ ๋จ์ผ ์ง์ ์ ์ญํ ์ ํ๋ฉฐ, ์์คํ ์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ธ๋ค.
Indirection
๋ ๊ฐ์ฒด ๊ฐ์ ์ง์ ์ ์ธ ์ฐ๊ฒฐ์ ํผํ๊ณ , ์ค๊ฐ ๊ฐ์ฒด๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ํธ์์ฉํ๋๋ก ์ฑ ์์ ํ ๋นํ๋ผ.
Indirection ํจํด์ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ ์ฐ์ฑ์ ๋์ด๊ธฐ ์ํ ์ค๊ณ ์ ๋ต์ด๋ค.
์ด ํจํด์ ์ ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์๋ค:
- ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋ค.
- ๋ชจ๋ ๊ฐ์ ์ํฅ์ ์ต์ํํ ์ ์๋ค.
- ํ ์คํธ๊ฐ ์ฌ์์ง๊ณ , ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค.
์๋ฅผ ๋ค์ด, ์๋น์ค ๋ ์ด์ด๋ ์ด๋ฒคํธ ๋ฒ์ค, ์ธํฐํ์ด์ค๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์ ๋ฑ์ด Indirection์ ๋ํ์ ์ธ ์ฌ๋ก๋ค.
๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๊ฐ ๋๋ฌด ์ง์ ์ ์ด๋ผ๋ฉด, ๊ทธ ์ค๊ฐ์ ์ถ์ํ ๊ณ์ธต์ด๋ ๋ธ๋ก์ปค ์ญํ ์ ์ํํ๋ ๊ฐ์ฒด๋ฅผ ๋๋ ๊ฒ์ ๊ณ ๋ คํ์.
Low coupling
๊ฐ์ฒด ๊ฐ์ ์ ์ฒด์ ์ธ ๊ฒฐํฉ๋๊ฐ ๋ฎ๊ฒ ์ ์ง๋๋๋ก ์ฑ ์์ ํ ๋นํ๋ผ.
๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์กดํ๋ฉด ๋ณ๊ฒฝ์ ๋งค์ฐ ์ทจ์ฝํด์ง๋ค ๋ฐ๋๋ก ๊ฒฐํฉ๋๊ฐ ๋ฎ์ผ๋ฉด ๊ฐ ๊ฐ์ฒด๋ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ ์ ์๊ณ , ์์ ์ด ๋ค๋ฅธ ๊ณณ์ ๋ฏธ์น๋ ์ํฅ๋ ์ค์ด๋ ๋ค.
ํ์ฌ์ ์ฑ ์ ํ ๋น์ ๊ฒํ ํ๊ฑฐ๋ ์ฌ๋ฌ ์ค๊ณ ๋์๋ค์ด ์์ ๋ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ ์ ์๋ ์ค๊ณ๋ฅผ ์ ํํ๋ผ.
High cohesion
๋์ ์์ง๋๋ฅผ ์ ์งํ ์ ์๊ฒ ์ฑ ์์ ํ ๋นํ๋ผ.
๊ฐ์ฒด๊ฐ ํ๋์ ์ฑ ์์ ์ง์คํ ์ ์๋๋ก ์ค๊ณํจ์ผ๋ก์จ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ๊ฐ์ง ์ ์๋ค.
- ํ๋์ ๋ช ํํ ๋ชฉ์ ์ ๊ฐ๋๋ค.
- ๋ด๋ถ ๊ตฌ์ฑ์์๋ค์ด ์๋ก ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๋ค.
- ๋ณ๊ฒฝ ์ฌ์ ๊ฐ ๋ช ํํด์ง๋ค.
๊ฐ์ฒด ํ๋์ ์ฌ๋ฌ ์ญํ ์ด ์์ฌ ์๋ค๋ฉด, ์์ง๋๋ฅผ ๋์ด๊ธฐ ์ํด ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๊ฑฐ๋ ์ฑ ์์ ์กฐ์ ํ๋ ๊ฒ์ ๊ณ ๋ คํ๋ผ.
Polymorphism
ํ์ ์ ๋ช ์์ ์ผ๋ก ์ ์ํ๊ณ ๊ฐ ํ์ ์ ๋คํ์ ์ผ๋ก ํ๋ํ๋ ์ฑ ์์ ํ ๋นํ๋ผ.
์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋ณํ๋ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ๋ ผ๋ฆฌ๋ค.
ํ๋ก๊ทธ๋จ์ if ~ else ๋๋ Switch ~ case ๋ฑ์ ์กฐ๊ฑด ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ์ค๊ณํ๋ค๋ฉด ์๋ก์ด ๋ณํ๊ฐ ์ผ์ด๋ ๊ฒฝ์ฐ ์กฐ๊ฑด ๋ ผ๋ฆฌ๋ฅผ ์์ ํด์ผ ํ๋ค.
์ด๊ฒ์ ํ๋ก๊ทธ๋จ์ ์์ ํ๊ธฐ ์ด๋ ต๊ณ ๋ณ๊ฒฝ์ ์ทจ์ฝํ๊ฒ ๋ง๋ ๋ค.
Polymorphism ํจํด์ ๊ฐ์ฒด์ ํ์ ์ ๊ฒ์ฌํด์ ํ์ ์ ๋ฐ๋ผ ์ฌ๋ฌ ๋์๋ค์ ์ํํ๋ ์กฐ๊ฑด์ ์ธ ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ๊ณ ๊ฒฝ๊ณ ํ๋ค.
๋์ ๋คํ์ฑ์ ์ด์ฉํด ์๋ก์ด ๋ณํ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ฝ๊ฒ ํ์ฅํ๋ผ๊ณ ๊ถ๊ณ ํ๋ค.
Protected variations
๋ณํ๊ฐ ์์๋๋ ๋ถ์์ ํ ์ง์ ๋ค์ ์๋ณํ๊ณ ๊ทธ ์ฃผ์์ ์์ ๋ ์ธํฐํ์ด์ค๋ฅผ ํ์ฑํ๋๋ก ์ฑ ์์ ํ ๋นํ๋ผ.
์ฑ ์ ํ ๋น์ ๊ด์ ์์ ์บก์ํ๋ฅผ ์ค๋ช ํ ๊ฒ์ผ๋ก, ์กฐ๊ฑด๋ฌธ ๋์ ๋คํ์ฑ์ ํ์ฉํ์ฌ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๋ค.
โ์ค๊ณ์์ ๋ณํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๊ณ ๋ คํ๊ณ ๋ณํ๋ ๊ฐ๋ ์ ์บก์ํํ๋ผโ๋ผ๋ ๊ฐ์ฒด์งํฅ์ ์ค๋ ๊ฒฉ์ธ์ Protected variations ํจํด์ ๋ณธ์ง์ ์ ์ค๋ช ํด์ค๋ค.
์ฐ๋ฆฌ๊ฐ ์บก์ํํด์ผ ํ๋ ๊ฒ์ ๋ณ๊ฒฝ์ด๋ค. ๋ณ๊ฒฝ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ฉด ์บก์ํํ๋ผ.
Pure fabrication
ํ๋์ ์ฑ ์์ง ๋ง๋ ํ ๋๋ฉ์ธ ๊ฐ๋ ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด, ๋๋ฉ์ธ ๊ฐ๋ ๊ณผ ๊ด๋ จ ์๋ ์ธ์์ ์ผ๋ก ๋ง๋ ๊ฐ์ฒด์ ๊ฐ์ฒด์ ์ฑ ์์ ํ ๋นํ๋ผ.
Pure fabrication ํจํด์ ์์ง๋๋ ๊ฒฐํฉ๋ ์ธก๋ฉด์์ ๋ ๋์ ์ค๊ณ๋ฅผ ๋ง๋ค๊ธฐ ์ํด, ํ์ค ์ธ๊ณ์ ๊ฐ๋ ๊ณผ ๋ฌด๊ดํ์ง๋ง ๋ ผ๋ฆฌ์ ์ผ๋ก ํ์ํ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
์ฆ, ์ด ํจํด์ ์์ง๋๋ฅผ ๋์ด๊ณ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ๋๋ฉ์ธ ๋ชจ๋ธ ์ธ์ ๊ฐ์ฒด๋ฅผ ๋์ ํ๋ผ๋ ๊ฒ์ด๋ค.
๋ํ์ ์ธ ์๋ก๋ Repository, DAO, Service, Validator ๋ฑ์ด ์๋ค.
์ด๋ฌํ ๊ฐ์ฒด๋ ํ์ค ์ธ๊ณ์์ ์ง์ ๋์๋๋ ๊ฐ๋ ์ด ์์ง๋ง, ์ํํธ์จ์ด ๋ด๋ถ์ ์ผ๋ก๋ ์ฑ ์์ ์ ์ ํ ๋ถ์ฐ์ํค๊ณ , ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ด๋ค.
Pure fabrication ์ ์ ์ ํ ํ์ฉํ๋ฉด ์์คํ ์ ๋ ํ ์คํธํ๊ธฐ ์ฌ์ด ๊ตฌ์กฐ๋ก ๋ง๋ค ์ ์๊ณ , ๋ชจ๋ํ ์์ค๋ ๋์์ง๋ค.