GOF์ ๋์์ธ ํจํด 1์ฅ, ์๋ก ์ ์ ๋ฆฌํด๋ด ๋๋ค.
๋จธ๋ฆฌ๋ง
- ๋์์ธ ํจํด์ ์ด๋ฆ๋ง ์ธ๊ธํด๋ ๋ณต์กํ ์ค๊ณ์ ๋ํ ์๋๋ฅผ ํํํ๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
- ์ด ์ฑ
์ ๊ณตํ
- ๋ณต์กํ ์์คํ ์ค๊ณ์์ ํจํด์ ์ญํ ์ ๋ณด์ฌ์ค
- ์๋ จ๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ๊ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ ์ ์๋ ํจํด์ ์ ๊ณตํจ
- ํ๋ฒ ์ฝ๊ณ ์๋ฒฝํ๊ฒ ์ดํดํ ๊ฒ์ด๋ผ ์๊ฐํ์ง ๋ง๋ผ.
๋์์ธ ํจํด์ด๋?
์ค๊ณ ์ ๋ง์ฃผ์ณค๋ ๊ฒฝํ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ๊ท๋ฉ์ ์ถ๋ก ํ ๊ฒฐ๊ณผ๋ฌผ๋ค.
- ์ํํธ์จ์ด ์ค๊ณ ํจํด์ ๊ฑด์ถ์์ ๋ง์ ์ํฅ์ ๋ฐ์๋ค. โํฌ๋ฆฌ์คํ ํผ ์๋ ์ฐ๋โ๋ ๊ทธ ์ค ํ๋ช ์ด๋ค.
- โ๊ฐ ๋์์ธ ํจํด์ ๊ธฐ์กด ํ๊ฒฝ๋ด์์ ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋๋ ๋ฌธ์ ๋ฅผ ์ค๋ช ํ ํด๋ฒ์ ํต์ฌ์ ์๋ ค์ค๋๋ค. ๋๋ฒ ๋ค์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ์ง ๋ง๊ณ 100๋ง๋ฒ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ๋ง์ด์ฃ โ
- ๊ฐ์ฒด ์งํฅ ์ค๊ณ์์๋ ์ด๋ ์ ์ฉ๋๋ค.
ํจํด์ด ๊ฐ์ง๋ ๋ค๊ฐ์ง ์์
- ํจํด ์ด๋ฆ
- ํ๋ ๋จ์ด๋ก ์ค๊ณ ๋ฌธ์ ์ ํด๋ฒ์ ์์ ํ๋ค.
- ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ.
- ๋ฌธ์
- ์ธ์ ํจํด์ ์ฌ์ฉํ๋๊ฐ?
- ๊ทธ ๋ฐฐ๊ฒฝ์ ๋ฌด์์ธ๊ฐ?
- ๊ธฐ์กด์ ์ด๋ค ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์๋๊ฐ?
- ํด๋ฒ
- ์ค๊ณ๋ฅผ ๊ตฌ์ฑํ๋ ์์
- ์์๋ค ๊ฐ์ ๊ด๊ณ
- ์ฑ ์
- ํ๋ ฅ๊ด๊ณ
- ๊ตฌ์ฒด์ ์ธ ์ค๊ณ๋ ๊ตฌํ์ ์ค๋ช ํ์ง๋ ์์
- ๊ฒฐ๊ตญ ํจํด์ template์ด๊ธฐ ๋๋ฌธ
- ๊ฒฐ๊ณผ
- ๊ฒฐ๊ณผ์ ์ฅ๋จ์
- ์ด ๋ถ๋ถ์ด ๊ฐ์ฅ ์ค์.
- ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ง๋์ด๋ ์ ์ฉ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ๋๋ฌธ
- ๋น์ฉ: ์๊ฐ, ์ธ์ด์ ๋ค๋ฆ, ๊ณต๊ฐ, ํจ์จ, ์ฌ์ฌ์ฉ์ฑ ๋ฑ
SmallTalk MVC๋ฅผ ์ฌ์ฉํ ๋์์ธ ํจํด
- Model, View, Controller๋ฅผ ํ๋์ ๊ฐ์ฒด์์ ์ฒ๋ฆฌํ๊ฒ๋๋ฉด ์์ ๊ฐ์ ๊ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์์ง๋ค.
- ์ด๋ ๊ฒ View๋ฅผ ๋ผ์ด๋ด๋ ์ค๊ณ ๋ฐฉ๋ฒ์ ๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์๋ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- Model์์ ์ผ์ด๋ ๋ณ๊ฒฝ์ ๋ค๋ฅธ ๊ฐ์ฒด ๋ค์ ๋ฐ์ํ๋๋ก ํ์ฌ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๊ฐ์ฒด๋ ๋ฐ์์ด ํ์ํ ๊ฐ์ฒด๋ค์ ๋ํด ์ํ์๊ฐ ์๊ฒ ๋ถ๋ฆฌํ ๊ฒ,
- ์ด๋ฐ ์ค๊ณ๋ฅผ ์ผ๋ฐํํ๋ฉด Observer Pattern์ด ๋๋ค.
- View์์๋ ๊ฐ๊ฐ์ View๋ฅผ ์ค์ฒฉ์ํฌ ์ ์๋ค.
- ์ฆ, ์ ์ดํ์ด๋ผ๋ View์์๋ Button์ด๋ผ๋ View์ Composition์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- ๊ทธ๋ฌ๋ฉด์๋ ๋ณตํฉ View๋ฅผ ๋จ์ผ View๋ก ์ฒ๋ฆฌํ ์๋ ์๋ค. (์ ์ดํ View๋ View๋ฅผ ์์)
- ์ด๋ฐ ์ค๊ณ๋ฅผ ์ผ๋ฐํํ๋ฉด Composite Pattern์ด ๋๋ค.
- Controller๋ฅผ ๋ณ๊ฒฝํ๋ฉด, User Input์ ๋ํด ๊ธฐ์กด๊ณผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋์ํ๋๋ก ํ ์ ์๋ค.
- ์ฆ, ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ํด ๋ค๋ฅธ ๋์ ์ ๋ต์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ Controller๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋๋ค๋ ๊ฒ์ด๋ค.
- ์ด๋ Strategy Pattern์ ํ ์์ด๋ค.
๋์์ธ ํจํด ๊ธฐ์ ํ๊ธฐ
๋์์ธ ํจํด์ ๋ํด ์ค๋ช ํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
- ํจํด์ด๋ฆ๊ณผ ๋ถ๋ฅ
- ์๋
- ๋ค๋ฅธ ์ด๋ฆ
- ๋๊ธฐ
- ํด๋น ํจํด ์์์ ๊ฐ์ฒด ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊น?
- ์๋๋ฆฌ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์์ค
- ํ์ฉ์ฑ
- ์ด๋ค ์ํฉ์ ์ ์ฉ๊ฐ๋ฅํ ๊น?
- ์๋ชป๋ ์ค๊ณ์ ์๋ ๋ฌด์์ผ๊น?
- ์ด๋ป๊ฒ ํ์ ํ ์ ์์๊น?
- ๊ตฌ์กฐ
- Class Diagram
- Sequence Diagram
- ์ฐธ์ฌ์
- ํด๋น ๊ตฌ์กฐ์ ์ฐธ์ฌํ๋ ๊ฐ์ฒด๋ฅผ ์ค๋ช ํจ
- ํ๋ ฅ ๋ฐฉ๋ฒ
- ์ฐธ์ฌ์๋ค์ด ์ด๋ป๊ฒ ํ๋ ฅํ๋์ง ์ ์ํจ
- ๊ฒฐ๊ณผ
- ์ด ํจํด์ ์ด์ฉํ ๊ฒฐ๊ณผ๋ ๋ฌด์์ธ๊ฐ?
- ์ฅ๋จ์ ์ ๋ฌด์์ธ๊ฐ?
- ์์คํ ์์๋ ์ด๋ค ๋ถ๋ถ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ค์ํํ ์ ์์๊น?
- ๊ตฌํ
- ์ฃผ์ํด์ผ ํ ๋ถ๋ถ์ ๋ฌด์์ธ๊ฐ?
- ์ธ์ด์ ๋ฐ๋ผ ์๋ ํน์ด์ฌํญ์ ์๋๊ฐ?
- ์์ ์ฝ๋
- C++, SmallTalk
- ์ฌ์ฉ์
- ์ค์ ์์คํ ์์ ์ฐพ์๋ณผ ์ ์๋ ํจํด๋ค์ ์์
- ๊ด๋ จ ํจํด
- ์ด ํจํด๊ณผ ๊ด๋ จ๋ ํจํด์ ๋ฌด์์ธ๊ฐ?
- ๊ทธ๋ค๊ณผ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ?
๋์์ธ ํจํด ์นดํ๋ก๊ทธ
์ด ์ฑ ์์๋ 23๊ฐ์ ํจํด๋ฅผ ์๊ฐํ๋ค.
- ๊ตฌ์ฒด์ ํด๋์ค๋ฅผ ์ง์ ํ์ง ์์
- ๊ด๋ จ์ฑ์ด ์๋ ๊ฐ์ฒด๋ค์ ์งํฉ์ ์์ฑ
- ํน์ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ค์ ์งํฉ์ ์์ฑ
- ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต
- ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ๋ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ก ๋ณํ
- ํธํ์ฑ์ด ์๋ ์ธํฐํ์ด์ค ๋๋ฌธ์ ํจ๊ป ๋์์ด ๋ถ๊ฐํ ํด๋์ค๋ฅผ ๋ฌถ์ด์ค
- ๊ตฌํ๋ถ์์ ์ถ์์ธต์ ๋ถ๋ฆฌํ์ฌ, ๋ ๋ฆฝ์ ์ผ๋ก ๋ณํํ ์ ์๊ฒ ํ๋ ํจํด
- ๋ณตํฉ ๊ฐ์ฒด์ ์์ฑ ๊ณผ์ ๊ณผ ํํ ๋ฐฉ๋ฒ์ ๋ถ๋ฆฌ
- ์์ฑ ๊ฐ์ฒด๊ฐ ๋ถ๋ฆฌ๋์ด ๋์ผํ ์์ฑ ์ ์ฐจ๋ฅผ ๊ฐ์ง์๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ค
- ์์ฒญ์ ๋ฐ๋ ๊ฐ์ฒด๋ฅผ ์ฐ์์ ์ผ๋ก ๋ฌถ์ด, ์ค์ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋๊น์ง ์ ๋ฌํ๋ ํจํด
- iOS์ Responder chain
- ์์ฒญ ์์ฒด๋ฅผ ์บก์ํํ์ฌ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์คํํ ์ ์๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋์ ํด๋์ค๋ฅผ ๋ง๋๋ ํจํด
- ๊ฐ์ฒด๋ค์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ์ฌ ๋ถ๋ถ-์ ์ฒด๋ฅผ ํํํจ
- ์ฌ์ฉ์๊ฐ ๋จ์ผ ๊ฐ์ฒด, ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ ๋์ผํ๊ฒ ๋ค๋ฃฐ ์ ์์
- ์ฃผ์ด์ง ์ํฉ ๋ฐ ์ฉ๋์ ๋ฐ๋ผ ํน์ ๊ฐ์ฒด์ ์ฑ ์์ ๋ง๋ถ์ด๋ ํจํด
- ๊ธฐ๋ฅ ํ์ฅ์ด ํ์ํ ๋ ์๋ธํด๋์ฑ ๋์ ์ฌ์ฉํ ์ ์๋ ์ ์ฐํ ๋์์ด ๋ ์ ์์
- ์๋ธ์์คํ ์ ์๋ ์ธํฐํ์ด์ค ์งํฉ์ ๋ํด ํ๋์ ํตํฉ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ํจํด
- ์๋ธ์์คํ ์ ์ข๋ ์ฌ์ฉํ๊ธฐ ํธํ๊ฒ ๋ง๋๋ ์์ ์์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต
- ๊ฐ์ฒด ์์ฑ ์ธํฐํ์ด์ค๋ ๋ฏธ๋ฆฌ ์ ์
- ๋ค๋ง, ์ธ์คํด์ค๋ฅผ ๋ง๋ค ํด๋์ค์ ๊ฒฐ์ ์ ์๋ธํด๋์ค์์ ์ ํ๋ ํจํด
- ํฌ๊ธฐ๊ฐ ์์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ ์์ ๋, ๊ณต์ ๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ์ง์ํ๋ ํจํด
- ํ ์คํธ ์ ๋ ฅ๊ธฐ
- ์ฃผ์ด์ง ์ธ์ด์ ๋ํด, ๊ทธ ์ธ์ด์ ๋ฌธ๋ฒ์ ์ํ ํํ ์๋จ์ ์ ์
- ๊ทธ๋ฆฌ๊ณ ๊ทธ ํํ ์๋จ์ ์ฌ์ฉํ์ฌ ํด๋น ์ธ์ด๋ก ์์ฑ๋ ๋ฌธ์๋ฅผ ํด์ํ๋ ํด์๊ธฐ๋ฅผ ์ ์ํ๋ ํจํด
- ๋ด๋ถ ํํ๋ถ๋ฅผ ๋ ธ์ถํ์ง ์๊ณ , ์ด๋ค ๊ฐ์ฒด ์งํ์ ์ํ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
- ํ ์งํฉ์ ์ํ ๊ฐ์ฒด๋ค์ ์ํธ์์ฉ์ ์บก์ํ
- ์๋ก๋ฅผ ์ฐธ์กฐํ์ง ์ํฟ๋ก ํจ์ผ๋ก์ ๊ฒฐํฉ๋๋ฅผ ์ค์ผ ์ ์๋ค.
- ํน์ ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ฅผ ์ก์๋ด๊ณ ์ค์ฒดํํจ
- ํ์ ํด๋น ๊ฐ์ฒด๊ฐ ๋ด๋ถ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๋์์ฌ ์ ์๋๋ก ํ๋ ํจํด
- ๊ฐ์ฒด ์ฌ์ด ์ผ๋๋ค ๊ด๊ณ๋ฅผ ์ ์ํจ
- ํน์ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋, ๋ฌถ์ธ ๊ฐ์ฒด๋ค์ด ๋ณํ๋ฅผ ํต์ง๋ฐ๊ณ ์๋์ผ๋ก ๊ฐฑ์ ๋๊ฒ ํ๋ ํจํด
- ์์ฑํ ๊ฐ์ฒด์ ์ข ๋ฅ๋ฅผ ๋ช ์ธํ๋๋ฐ ์ํ์ด ๋๋ ์์๋ฌผ์ ์ด์ฉ
- ๊ทธ๋ฆฌ๊ณ ์ด ์ํ์ ๋ณต์ฌํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจํด
- ํน์ ๊ฐ์ฒด๋ก ์ ๊ทผํ๋ ๊ฒ์ ํต์ ํ๊ธฐ ์ํด ๊ฐ์ฒด์ ๋๋ฆฌ์, placeholder๋ฅผ ์ ๊ณตํ๋ ํจํด
- ํน์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ค์ง ํ๋์์ ๋ณด์ฅ
- ์ ์ญ์ ์ธ ์ ์ด์ ์ ์ ๊ณตํ๋ ํจํด
- ๊ฐ์ฒด์ ๋ด๋ถ ์ํ์ ๋ฐ๋ผ ์ค์ค๋ก ํ๋์ ๋ณ๊ฒฝํ ์ ์๊ฒ๋ ํ๊ฐํ๋ ํจํด
- ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ฒด๊ฐ ์์ ์ ํด๋์ค๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ฒ๋ผ ๋ณด์
- ๋์ผ ๊ณ์ด์ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์ ์ํ๊ณ , ์๊ณ ๋ฆฌ์ฆ์ ์บก์ํํจ
- ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ๋ค์ด ์ํธ๊ตํ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด ์ฌ์ฉ์์ ์๊ด์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํจ
- ์๊ณ ๋ฆฌ์ฆ์ ๋ผ๋๋ง ์ ์ํจ
- ๊ฐ ๋จ๊ณ์์ ์ํํ ๊ตฌ์ฒด์ ์ฒ๋ฆฌ๋ ์๋ธํด๋์ค ์ชฝ์ผ๋ก ๋ฏธ๋ฃจ๋ ํจํด
- ์ฆ, ๊ตฌ์กฐ๋ ๋๋, ์๊ณ ๋ฆฌ์ฆ ์ฒ๋ฆฌ๋ฅผ ์๋ธํด๋์ค์์ ์ฌ์ ์
- ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋ ์์์ ๋ํด ์ํํ ์ฐ์ฐ์ ํํํ๋ ํจํด
- ์ฐ์ฐ์ ์ ์ฉํ ์์์ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์๋ก์ด ์ฐ์ฐ์ ์ ์ํ ์ ์์