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์ ์ ์งํค๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ณด์ธ๋ค.