๐ General Responsibility Assignment Software Pattern, ๊ฐ์ฒด ์ค๊ณ์ ๋ํ 9๊ฐ์ง ์์น
- ๋ชฉ์ : ํ๋์ ํฐ ์์คํ ์ Module๋ก ์ชผ๊ฐ ๋ค, ๊ฐ๊ฐ์ Responsibility๋ฅผ ๋ถ์ฌ โก SW Complexity (SW Crisis)๋ฅผ ๋ฎ์ถ๊ธฐ ์ํจ
- ๋ฐฉ๋ฒ = Modularity ์ฆ๊ฐ
- Separation of Concerns (๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ)
- Data Abstraction, Encapsulation (์บก์ํ), Information Hiding (์ ๋ณด ์๋)
- ์ธก์ โก Low Coupling (๊ฒฐํฉ๋), High Cohesion (์์ง๋)
Information Expert Pattern
๐ ๋๊ตฌ์๊ฒ ํน์ ์ฑ
์์ ๋ถ์ฌํ ์ง?
= ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง ๊ฐ์ฒด
- ์ํฉ
- ๐ซ ์ ๋ณด๊ฐ ์ฌ๋ฌ ๊ฐ์ฒด์ ๋๋์ด ์์ ๋ โก ํ์ ํ์
- โญ Separation of Concerns (๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ) = Pure Fabrication๊ณผ ๊ณ ๋ฏผ
- ๐ DB ์ ์ฅ โก ์ ๋ณด๋ฅผ ๊ฐ์ง ๋ชจ๋ ๊ฐ์ฒด๋ง๋ค DB ๋ก์ง์ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค, Domain์ ์๋ ์ DB Class๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ ๋์ ์ ํ (Low Cohesion (์์ง๋))
- โค๏ธ Data Abstraction, Encapsulation (์บก์ํ), Information Hiding (์ ๋ณด ์๋) โก Low Coupling (๊ฒฐํฉ๋)
Creator Pattern
๐ ๊ฐ์ฒด A๋ฅผ ๋๊ฐ ์์ฑํ ์ง?
= A๋ฅผ ํฌํจํ๋/(Shared) Aggregation (์งํฉ)ํ๋ B
= A๋ฅผ ๊ธฐ๋กํ๋/๋ฐ์ ํ๊ฒ ์ฌ์ฉํ๋/์ด๊ธฐ๊ฐ์ ๊ฐ๋ B
๐ Abstract Factory, Singleton
- ์ํฉ
- ๐ซ ์ฑ๋ฅ ๋ฌธ์ ๋ก ๊ฐ์ฒด ์์ฑ๋ณด๋ค ์ฌํ์ฉ์ด ํ์ํ ๋
- ๐ซ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฌ๋ฌ ํด๋์ค ํ์ ์ค ํ๋๋ฅผ ์ ํํด์ ์์ฑํด์ผ ํ ๋
- ๐ซ ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๊ฐ์๋ผ์์ผ ํ ๋ โก Dependency Injection (์์กด์ฑ ์ฃผ์ )
- โค๏ธ Low Coupling (๊ฒฐํฉ๋)
Controller Pattern
๐ UI์ ์ ์ ์ธํ์ ์์ฉ ๋ก์ง์ผ๋ก ์ ๋ฌํ๋
= ์ต์
๋ ์ค ํ๋ ํ 1
- (Sub) System์ ๋ํํ ์ ์๋ ํ๋์ ๊ฐ์ฒด ์์ฑ
- Use Case ์๋๋ฆฌ์ค์ ๋ฐ๋ผ
Low Coupling (๊ฒฐํฉ๋) Pattern
๐ ์๋ก ๋ค๋ฅธ ๋์ ์ค ์ด๋ค ๊ฑธ ์ ํํ ์ง?
= Coupling (๊ฒฐํฉ๋)์ด ๋ฎ์์ง๋ ๋ฐฉํฅ์ผ๋ก ์ฑ
์ ๋ถ์ฌ
= โญ ๊ผญ ํ์ํ Link๊ฐ ์๋๋ผ๋ฉด, ์ฒ๋ฆฌ Delegation (์์)
- ์ํฉ: ๐ซ ๋ณํ๊ฐ ๊ฑฐ์ ์ผ์ด๋์ง ์์ ๋
- ๐ Java Library ๋ฑ, ์์ฉ ๋จ์์ ๋ง๋ Class๊ฐ ์๋ ๊ฒ๋ค
High Cohesion (์์ง๋) Pattern
๐ ์๋ก ๋ค๋ฅธ ๋์ ์ค ์ด๋ค ๊ฑธ ์ ํํ ์ง?
= Cohesion (์์ง๋)์ด ๋์์ง๋ ๋ฐฉํฅ์ผ๋ก ์ฑ
์ ๋ถ์ฌ
= โญ ์ฌ๋ฌ ๋ค๋ฅธ ์ฑ
์์ด ์ถ๊ฐ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ Class์ ๊ฒฝ์ฐ, Interface ์ญํ ๋ง ๋งก๊ณ ์ฑ
์์ด ์ ์ด์ง๋ ๋ฐฉํฅ์ผ๋ก
Polymorphism (๋คํ์ฑ) Pattern
๐ ํ์
์ ๋ฐ๋ผ ํ๋์ด ๋ฌ๋ผ์ง ๋, ๋๊ตฌ์๊ฒ ์ฑ
์์ ๋ถ์ฌํ ์ง?
= Polymorphism (๋คํ์ฑ) OP ํ์ฉ โก ์ธ๋ถ์์ ๋ณด์ด๋ Interface๋ ๊ฐ๋, ๋์ ๋ค๋ฅด๋๋ก
- ์ํฉ
- ๋น์ทํ ๋ณ์ข ๋ค์ ์ด๋ป๊ฒ ๋ค๋ฃฐ์ง ๊ณ ๋ฏผํ ๋
- โญ๐ซ Future Proofing, ๋ฏธ๋ฆฌ ํ์ฅ๋ ๋ฏธ๋๋ฅผ ์๊ฒฌํ์ฌ ํ๋ ๊ฒ์ ๊ดํ Cost
- โค๏ธ ์ฅ์
- Reliable (์ ๋ขฐ์ฑ)
- ์ ์ ํ์ง ์ถ๊ฐ ์ ๊ธฐ์กด ๋ก์ง์ ์ํฅ ์ฃผ์ง ์์ โ
if,switch
- ๐ ๋จ์
- ๋จ์ #ํด๋์ค ํญ๋ฐ
- Less Readability (๊ฐ๋ ์ฑ)
Pure Fabrication Pattern
๐ Low Coupling (๊ฒฐํฉ๋), High Cohesion (์์ง๋)์ ์๋ฐํ๊ณ ์ถ์ง ์์ ๋, ๋๊ตฌ์๊ฒ ์ฑ
์์ ๋ถ์ฌํ ์ง?
๐ ์์ํ ๊ฒ์ ๋ง๋ค์ด ๋ด๋ค
= Separation of Concerns (๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ)
= โญ Domain์๋ ์๋ ๊ฐ์์, ํธ์๋ฅผ ์ํ Behavior Class ์์ฑ
- ์ํฉ: ๋น์ทํ ๋ก์ง์ด Information Expert ์์น ๋ฑ์ ์ํด ์ฌ๋ฌ ๊ณณ์ ๋ถ์ฐ โก Low Cohesion (์์ง๋)์ผ ๋
- โค๏ธ ๋์ผ ๋ก์ง์ ๋ํ ๋ณต์ฌ๋ณธ ๊ฐ์ โก Reusability (์ฌ์ฌ์ฉ์ฑ)
Indirection Pattern
๐ Direct Coupling (๊ฒฐํฉ๋)์ ์ค์ด๊ธฐ ์ํด, ๋๊ตฌ์๊ฒ ์ฑ
์์ ๋ถ์ฌํ ์ง?
= โญ **Intermediate ๊ฐ์ฒด = ์ค๊ฐ Interface**๋๋ง Coupling (๊ฒฐํฉ๋)์ ๋งบ๋๋ก ํจ
๐ Adapter, Facade (ํผ์ฌ๋), Proxy, Mediator
PV (Protected Variations Pattern)
๐ ๋ค์์ฑ/๋ณํ๊ฐ ๋ค๋ฅธ Element์ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ์ํด, ๋๊ตฌ์๊ฒ ์ฑ
์์ ๋ถ์ฌํ ์ง?
= ๊ธฐ์กด ๋ก์ง/๋์์ธ์ ๋ณํ๋ฅผ ์ฃผ์ง ์๋๋ก, ๋ค์์ฑ/๋ณํ๊ฐ ์๊ธธ ์ง์ ์ ์์ธกํ์ฌ ์์ ์ ์ธ Interface๋ฅผ ํตํด ํฌ์ฅ
= OCP (Open Close Principle)
- โค๏ธ ์ฅ์
- Flexibility (์ ์ฐ์ฑ), ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณํ๋ก๋ถํฐ ๋ณดํธํ ์ ์์
- ๋ ๊ตฌ์กฐํ๋ ๋์์ธ ์ ๊ณต โก Maintainability (์ ์ง๋ณด์์ฑ) ์ ๊ธฐ์กด ๋์์ธ์ด ์ ์ง๋ ๊ฐ๋ฅ์ฑ ๋ ๋์