์ด๋ ์ง๋จ์ด๋ ๋ฐ๋ผํ๋ ๊ฐ์น๊ฐ ์๋ค. ๊ฐ์ ์๋ ์๊ณ , ํ๊ต์๋ ์๊ณ , ์ง์ฅ์๋ ์๋ค. ์ฐ๋ฆฌ ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ์ด ์ผ์ด๊ธฐ ๋๋ฌธ์, ์ด ํ์ง์ ๋์ด๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ ์๊ฑด์ด๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์ ์ค์ํ ๊ฐ์น๋ค์ ๋ํด์ ์์๋ณด๊ณ , ์ด๋ฅผ ์ํธ(?)ํ๊ธฐ ์ํ ์์น๋ค์ ๋ํด์ ์๊ธฐํ๋ ์๊ฐ์ ๊ฐ์ง๋ ค ํ๋ค. ์ด๋ฒ ๊ธ์ Kent Beck์ Implement Pattern์ ๊ธฐ์ค์ผ๋ก ์์ฑํ๋ค.
ํ๋จ ๊ธฐ์ค์ด ํ์ํ ์ด์
- ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋ ์์ฑ ๋งค ์๊ฐ ํ๋จ์ ์๊ตฌํจ
- ํ์ง๋ง ์ ์ฝ ์๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ๋ง์ ์๊ฐ์ ์ธ ์๋ ์์
- ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์์ง๋๋ฅผ ๋์๋๋ฐ ์ฝ๋๊ฐ ๋ ์ด์ํด์ง
- ์์ผ๊น?
- ํ๋จ ๊ธฐ์ค์ด ํ์ํจ
- ํ๋จ ๊ธฐ์ค์ ํฉ์๊ฐ ํ์
๊ตฌํ์ ์์ด ํ์ํ ๊ฐ์น 3๊ฐ์ง
- ์ปค๋ฎค๋์ผ์ด์
- ํ๋ก๊ทธ๋๋ฐ์ ์์ด ๊ฐ์ฅ ์ค์ํ ๊ฐ์น
- ์ฝ๋๋ ๋๊ตฐ๊ฐ๊ฐ ๊ณ์ ์ฝ์ด์ผ ํจ
- ์ฝ๋๋ฅผ ํตํด ์ํตํจ
- ์ฝ๊ณ ์ดํด์ํฌ ์ ์๋ ์ฝ๋๋ ๊ฐ์น๊ฐ ์์
- ๋จ์ํจ
- ๋จ์ํ์ฌ์ผ ์ปค๋ฎค๋์ผ์ด์ ์ ๋์์ด ๋จ
- ๋ฒ๊ทธ๊ฐ ์์ด์ง
- ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๋จ์ํ๊ฒ ๋ฎ์ถ ์ ์์
- ์ฃผ์ํ ์
- ๋จ์ํจ์ ๊ฐ๋ฐ์, ์กฐ์ง ์์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง
- ์๋์ ์ธ ๊ฒ
- ๋ฏธ๋์ ํ์ฅ์ ์ํ ๋ถํ์ํ๊ฒ ๋ณต์กํ ํจํด๋ ๊ฒฝ๊ณ์ ๋์์
- ๊ทธ๋ฆฌ๋ํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ณ์
- ๋จ์ํจ๊ณผ ์งง์๊ณผ๋ ๋ค๋ฆ
- ๋จ์ํจ์ ์ฝ๊ธฐ ์ฌ์์ ๊ฐ๊น์
- ๋จ์ํจ์ ๊ฐ๋ฐ์, ์กฐ์ง ์์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง
- ์ ์ฐํจ
- ์ปค๋ฎค๋์ผ์ด์ ๊ณผ ๋จ์ํจ์ด ๋ง์กฑ๋๋ ๋ฒ์ ๋ด์์ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ์ถ๊ตฌ
- ๋๋ถ๋ถ์ ์๊ฐ์ ๊ธฐ๋ณธ ์ฝ๋๋ฅผ ์์ ํ๋ ์ผ์ ์ฌ์ฉ
- ๊ฐ๋ฅํ ํ ์ ์ฐํ๊ฒ ์ ์ง
- ์ ์ฐ์ฑ ํ๋ณด๋ ๋จ์ํจ์ Trade off
๊ฐ์น๋ฅผ ์งํค๊ธฐ ์ํ ์์น 6๊ฐ์ง
- ์ง์ญ์ ๋ณํ
- ์ฝ๋ ์์ ์ ํจ๊ป ์์ ๋์ด์ผ ํ๋ ๋ถ๋ถ ์ต์ํ/์ง์ญํ
- ์ฝ๋ ๊ด๋ฆฌ ๋น์ฉ์ ์ค์
- ์ค๋ณต๋ ์ฝ๋๋ ๊ด๋ฆฌ ๋น์ฉ์ ๋์
- ์ต์ ์ค๋ณต
- ์ค๋ณต๋ ์ฝ๋๋ ๋์์ ๋ค๋ฅธ ๋ถ๋ถ๊น์ง ์์ ํด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋์
- ๊ด๋ฆฌ๋น์ฉ์ ๋์
- ๋ก์ง๊ณผ ๋ฐ์ดํฐ์ ๊ฒฐํฉ
- ๋ก์ง๊ณผ ๋ฐ์ดํฐ๋ ํ ๊ณณ์ ์ ์ง๋๋ ๊ฒ์ด ์ ๋ฆฌ
- ๋ก์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์
- ๋ฐ์ดํฐ ์์ ์ ๋ก์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์
- ๋ก์ง๊ณผ ๋ฐ์ดํฐ๋ ํ ๊ณณ์ ์ ์ง๋๋ ๊ฒ์ด ์ ๋ฆฌ
- ๋์นญ์ฑ
- ์ฝ๋๋ ๋์นญ์ฑ์ ๊ฐ์ง๋ฉด ์ข์
- add - remove
- ํจ๊ป ์์ฑ๋ ๊ฒ์ ํจ๊ป ์๋ฉธ๋๋๋ก ๊ตฌ์ฑ
- ์ฝ๋ ์ดํด์ ๋์์ ์ค
- ๋์นญ์ ๊ตฌ์กฐ๋ก ๋ง๋ค๊ฒ ๋๋ฉด, A๊ฐ๋ ์ดํด์ ๋์์ B๊ฐ๋ ์ดํด๊ฐ ๊ฐ๋ฅ
- ์ค๋ณต์ฝ๋ ์ค์ด๊ธฐ ์ฌ์
- ์ฝ๋๋ ๋์นญ์ฑ์ ๊ฐ์ง๋ฉด ์ข์
- ์ ์ธ์ ํํ
- ์ ์ธ์ ํํ์ ์ ์ ํ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ฌ๋ผ๊ฐ
- โ์ด๋ป๊ฒ ํ๋๋โ ๋ณด๋ค โ๋ฌด์์ ํ๋๋โ๋ฅผ ๊ธฐ์
- ๋ณํ์จ
- ๊ฐ์ ์๊ฐ๋ด ๊ฐ์ด ๋ณํด์ผ ํ๋ ๊ฒ๋ค
- ์๊ฐ์ ๋์นญ์ฑ
- ์ผ๋ฐ์ ์ธ ์ํฉ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋ vs ํน์ ์ํฉ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋
- ์๋ ์ ๋ฌ์ด ์ฌ์
- ์ฝ๋ ์์ ์ ๋ํ ์ํฅ์ด ์ ์
OOP์ ๋ํ ์๋ฌธ๊ณผ ๊ณ ๋ฏผ
- ์๋ฌธ๋ค
- ๋จ์ํ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ฉด OOP์ผ๊น?
- OOP์์ ๋งํ๋ ๋ง์ ๊ฐ๋ ์ค ์ด๋ค ๊ฒ์ด ํต์ฌ ๊ฐ์น์ผ๊น?
- ์ ๋ง๋ค์ด์ง framework๋ ์ ๊ทธ๋ฐ ๋ชจ์์ผ๊น?
- ์๋ง์ ๋์์ธ ํจํด๋ค์ ์ผ์ผํ ์ธ์์ผ ํ ๊น?
- Inheritance
- OOP์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
์ธ๊ฐ?
- ์ฃผ์ฅ: OOP์ ๊ฐ์น ์ค ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ฌํ์ฉ, ์์์ด ๊ทธ๋ฌํ ๋ถ๋ถ์์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค
- Super Class ๊ธฐ๋ฅ ํ์ฅ
- Super class ๊ธฐ๋ฅ ์ฌํ์ฉ
- ์ฃผ์ฅ: OOP์ ๊ฐ์น ์ค ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ฌํ์ฉ, ์์์ด ๊ทธ๋ฌํ ๋ถ๋ถ์์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค
- ์ข์ ์ ํ์ง๊ฐ ์๋ ํ๋ฅ ์ด ๋์
- ์ฌํ์ฉ ์ํ ์์ ๋จ๋ฐ
- ๊ณ ๊ฐ๋์ Coupling์
- ํ๋ฒ ์์์ผ๋ก ์ฒ๋ฆฌํ๋ค๋ฉด, ๋ฐ๊พธ๋๋ฐ ๋น์ฉ์ด ๋งค์ฐ ํผ
- ํ์ฌ๋ก์๋ ์์๋ณด๋ค Composition์ด ๋ณด๋ค ์ข์ ํด๋ฒ์
- ๋๋๋ก์ด๋ฉด ์์์ ์ฌ์ฉํ์ง ๋ง์๋ผ.
- OOP์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
์ธ๊ฐ?
- Abstraction
- OOP์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
- ๊ธฐ๋ณธ ๊ฐ๋ ๋ค์ ์ผ๊ด๋๊ฒ ์ถ์ํ์ ๊ฐ๋ ์ ์ฌ์ฉํจ
- ์์ ์ญ์, ์ถ์ํ ๊ด์ ์์ ๋ฐ๋ผ๋ณด์์ผ ํจ
- ๊ธฐ๋ฅ์ ํ์ฅ์ด ์๋๊ณ , ์ถ์์ ๊ตฌ์ฒดํ ๋๊ตฌ๋ก ๋ด์ผ ํจ
- UIViewController๋ฅผ ๊ตฌ์ฒดํํ์ฌ(์์์ ์ฌ์ฉํ์ฌ) ๋ด๊ฐ ์ฌ์ฉํ CustomViewController๋ฅผ ๋ง๋ ๋ค.
- ๊ธฐ๋ฅ์ ํ์ฅ์ด ์๋๊ณ , ์ถ์์ ๊ตฌ์ฒดํ ๋๊ตฌ๋ก ๋ด์ผ ํจ
- ๋ฌด์์ ๊ณต๋ถํด์ผ ํ ๊น?
- ์ ์ค๊ณ๋ OOP Code์ ๊ณตํต์ ์ ํ์ ํ์.
- ๋ชจ๋ ๋์์ธ ํจํด์ ์ธ์ฐ๋ ๊ฒ์ด ์๋๊ณ , ์ด๋ป๊ฒ ์ ๋ํ ์ง ์ดํดํ๋ ๊ฒ์ด ์ค์
- ์ด๊ฒ์ ์ํ๊ธฐ ์ํ ๊ฐ๋ ์ด SOLID
- ์ฆ, ๋์์ธ ํจํด ์๋์ ์กด์ฌํ๋ ๊ฐ๋ ์ด SOLID์ด๋ค.
- SOLID
- Single Respoinsibility Principle (๋จ์ผ ์ฑ ์ ์์น)
- Open / Closed Principle (๊ฐ๋ฐฉ ํ์ ์์น)
- Liskov Subsitution Principle (๋ฆฌ์ค์ฝํ ์นํ ์์น)
- Interface Sergregation Principle (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
- Dependency Inversion Principle (์์กด ๊ด๊ณ ์ญ์ ์์น)