๋ฆฌํฉํ ๋ง ์์ ์ค, ๊ณ ๋ฏผํ๋ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค. ๋๊ตฐ๊ฐ์๊ฒ๋ ๋์์ด ๋๊ฒ ์ง.
๋ฌธ์ ์ํฉ
์ผ๋จ ๋ฌธ์ ์ํฉ์ ์์ ๊ฐ๋ค. ๊ฐ์ VC๋ก ์์ฑ๋์ด์์์๋ ๋ถ๊ตฌํ๊ณ , ์ค์ ์ ์ ๊ฐ ์ง์ ํ์ ๋ ๋ณด๋ ํ๋ฉด์ ๋๊ฐ์ง์ด๋ค. ํ๋๋ ์๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ โ๋ฑ๋กโ์ด ํ์ํ๊ณ , ํ๋๋ ์ด๋ฏธ ๋ฑ๋ก๋ ์ํ์ โ์์ โํ๋ ํ๋ฉด์ด๋ค.
๋ ํ๋ฉด์ ์๋นํ ์ ์ฌํ๋ฉฐ, ์ฝ๊ฐ์ ๋ก์ง ์ฐจ์ด๊ฐ ์๋ค. ๊ฐ์ฅ ๋ํ์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฌ์ด ๊ฒ์ด ๋ฑ๋ก์ ๊ฒฝ์ฐ ์ถ๊ฐ๋ง ๊ฐ๋ฅํ๊ณ , ์์ ์ ๊ฒฝ์ฐ ์ญ์ , ์์ ์ด ๊ฐ๋ฅํ๋ค. ์ด ๋ฒํผ๋ค์ ๋จ์ํ hidden ์ฒ๋ฆฌ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก๋ง ๋์ด ์๋ ์ํ์ด๋ค.
์ํ ์ ํ
์ ๊ฒฝ์ฐ โ์์ โ, โ๋ฑ๋กโ ํ๋ฉด ๋ชจ๋์์ ์ฌ์ฉํ๋ method์ด์ง๋ง, ์ค์ ๋ก ๋์ํ๋ ๋ก์ง์ ๋ค๋ฅด๋ค. ์ถ๊ฐ ํ๊ธฐ
, ์์ ํ๊ธฐ
, ์ญ์ ํ๊ธฐ
์ ๊ฒฝ์ฐ ๋ณด์ฌ์ง๋ mode(์์ , ๋ฑ๋ก)์ ๋ฐ๋ผ ๋ฌ๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ค.
์ํฉ ํ๋จ
๊ฐ์ฅ ์ด์์ ์ผ๋ก๋, ๋ ํ๋ฉด์ด ๋น์ทํ์ง๋ง ๋ค๋ฅธ ๋์์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ VC๋ฅผ ๋ง๋ค๊ณ ๋ ๊ฐ์ ViewModel์ ๊ฐ์ง๋ ๊ฒ์ด ๋ณด๊ธฐ ์ข์ ๊ฒ์ด๋ค. ์ด ๋, View code๋ฅผ componentํ ํ์ฌ ์ฌํ์ฉ์ ํตํด ์์ฐ์ฑ์ ๋ํ๋ ๋ฐฉํฅ์ด ๊ฐ์ฅ ๊น๋ํ ๊ฒ์ด๋ค.
ํ์ง๋ง, ์ด๋ฌํ ์ ์ ์์๋ ๋ถ๊ตฌํ๊ณ ์ง๊ธ ์ํฉ์์๋ VC ์ฝ๋๋ฅผ ๋ง์ง์ง ์์ ์๊ฐ์ด๋ค. ์ผ๋จ Componentํ ๋์ง๋ ์์๊ณ , Storyboard๋ก ์ง์ ธ์๊ธฐ ๋๋ฌธ์, ๋น์ฅ ์ด ๋ถ๋ถ์ ๊ฑด๋ค์ด๋ ๊ฑด ๋ฆฌํฉํ ๋ง ์ ํฐ์ผ์ด๋ผ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ณด๋ค๋ ์ผ๋จ business logic ๋ถํฐ ๋ถ๋ฆฌ๋ฅผ ํ๊ณ , ์ถํ์ View๋ ๋ฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋, ๊ทธ ๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ณด๋ค ํจ์จ์ ์ด๋ผ ํ๋จํ๋ค. ์ด๋ฌํ ๊ฐ์ ์์ ์ถ๋ฐํ ํด๋น ์์ ์ ์ ์ฝ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ ์ฝ ์กฐ๊ฑด
โ๋ฑ๋กโ๊ณผ โ์์ โ์ ์์ด ViewModel์ ๋ถ๋ฆฌํ๋ค. โ๋ฑ๋กโ๊ณผ โ์์ โ์ ๋ช ๋ฐฑํ ๋ค๋ฅธ ๋์์ ํ๊ณ ์๋ค. ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ถํ ๊ฐ๋ฐ์๊ฐ ํด๋น ํ๋ฉด์ ์ง์ ํ ๋ ํธํ๊ฒ ํ ์ ์์ ๊ฒ์ด๋ค. ์ค์ ๋ก ๋ ๋ก์ง์ด ํผ์ฌ๋์ด ์์ด ํด๋น ํ๋ฉด์ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ์ด ์๋นํ ์ด๋ ค์ ๋ค. ๊ทผ๋ณธ์ ์ผ๋ก ๋ ํ๋ฉด์ ์ง์ ์์ ์์ ๋ถ๊ธฐ๊ฐ ๋์ด์ผ ํจ์ ๋ช ์์ ์ผ๋ก ์์ฑํ๋ค๋ฉด, ์ดํด๊ฐ ์ฌ์ธ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํด๋น ํ๋ฉด์ business logic์ ๋ถ๋ฆฌํ ViewModel์ ๊ฐ์ง๋ ๊ฒ์ด ๋ง๋ค๊ณ ํ๋จํ๋ค.
๋๋ฒ์งธ๋ก, ๋น์ฅ View๋ฅผ ๊ฑด๋ค์ด์ง ์๋๋ค. View๋ ์๋์ ์ผ๋ก ๋ง์ด ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ด๋ค. ์ค์ ๋ก ์ถํ ์คํ์์ ๋ณ๊ฒฝ๋จ์ด ํ์ธ๋์๋ค. Cost ์ธก๋ฉด์์ ๋ณด๋ค ์ฐ์ ์ด ์๋๋ผ๊ณ ์๊ฐํ๋ค.
๋ชฉํ
์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์์ ๋ฌ์ฑํ๊ณ ์ถ์ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ต๋ํ ์ฌ์ฌ์ฉ์ฑ, ์ฝ๋์ ๊ฐ๋ ์ฑ, ์ง๊ด์ฑ์ ์ ์งํ๋ฉด์ ์ค๋ณต์ ์ต์ํํ ๋ถ๋ฆฌ๋ฅผ ์ฑ๊ณต์ํจ๋ค.
ํด๋น ํ๋ฉด์ ๋ํด ์ด์ ์ผ ์กฐ๊ธ ์ดํด๊ฐ ๋์์ง๋ง ์ด๋ฐ์๋ ์ด๋ค ์ ๋ต์ ํด์ผํ ์ง ๋ชฐ๋ผ ๋ฐฐ์ด๋ค๊ณ ์๊ฐํ๊ณ ๋ด๊ฐ ์๊ฐํ๋ ๋ชจ๋ ์ต์ ์ ์ ์ฉํด๋ณด์๋ค. ๋ค์์ ๊ทธ ๊ณผ์ ์ด๋ค.
Naiveํ Protocol ์ฌ์ฉ
์ผ๋จ ๊ฐ์ฅ ๋จผ์ ์๊ฐํ ์ต์
์ Protocol์ด๋ค. ์ด์ ์ OOP์ ๋ํ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์, ์์์ ์ตํ์ ์๋จ์ด๋ผ๊ณ ์ ๋ฆฌํ ์ ์ด ์๋ค. Object Oriented Programming ๊ธ์ ์ ํ์๋ค. Interface๋ง ์ ์ฉํด์ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ์ฒ๋ฆฌํ๊ณ ์ถ์๋ค. โ๋ฑ๋กโ ๋ฐ โ์์ โ ํ๋ฉด์์ ์ถ๊ฐํ๊ธฐ
, ์์ ํ๊ธฐ
๋ฒํผ์ UI์ ์ผ๋ก ๋์ผํ๊ฒ ๋์ด ์์๋๋ฐ, ์ด๋ฌํ ์ ์์ ๋ค์๊ณผ ๊ฐ์ ์๊ฐ์ ํ๋ค.
๊ฐ์ ๋ฒํผ์ธ๋ฐ ๋ค๋ฅธ ๋์์ ํ๋ค? ๊ทธ๋ผ ๊ฐ์ interface๋ฅผ ๋ง๋ค๊ณ , ์ค์ ๊ตฌํ๋ง EnrollViewModel, EditViewModel์์ ๋ค๋ฅด๊ฒ ํ๋ฉด ๋๊ฒ ๋ค!
์๋ ๊ทธ๋ฌํ ์๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๊ทธ๋ ค๋ณธ ๊ทธ๋ฆผ์ด๋ค. ํ์ง๋ง ์ค์ ๋ก๋ โ์์ โ ํ๋ฉด์๋ ์ญ์ ํ๊ธฐ
๋ ์์๊ณ , ๊ธฐ์กด ์๊ฐ์ ์ ์ฉํ ๊ฒฝ์ฐ ์ถ๊ฐ ํ๊ธฐ
, ์์ ํ๊ธฐ
, ์ญ์ ํ๊ธฐ
์ธ ๊ฐ์ ํจ์๋ฅผ ํ๋์ interface๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค๋ ๋ฌธ์ ๊ฐ ์์๋ค. ๋ฑ๋ด๋ ๋ญ๊ฐ ์ด์ํ๋ค.
์ผ๋จ ์ด๊ฒ ๋ง๋ค๊ณ ๊ฐ์ ํ๋๋ผ๋ ์ด๋ค ์ด๋ฆ์ ์ง์ด์ผ ํ ์ง๊ฐ ๋ถ๋ถ๋ช ํ๋ค. ์ด๋ฏธ ์ฌ๊ธฐ์ ์ด ๋ฐฉ๋ฒ์ ๋ชจ์์ด ์๋ค๋ ๊ฒ์ด๋ค. ํน์ ํจ์๊ฐ ์ฌ๋ฌ ๋์์ ํ๋ค๋ ๊ฒ์ด ๋ช ๋ฐฑํ๊ฒ ๋๋ฌ๋๋ ์๊ฐ์ด๋ค. ๊ทธ๋๋ ์ผ๋จ ํด๋ดค๋ค.
tempMethod
๋ผ๊ณ ์์๋ก ์นญํ ์ํ์์ ์ ์ฉํด๋ณด์๋ค. ํฌ๊ฒ 3๊ฐ์ง์ ๋ฌธ์ ๊ฐ ์์๋ค.
- Protocol์ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ์ง ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ ๊ตฌํ์ฒด์์ ์ผ์ผํด Property๋ฅผ ๋ง๋ค์ด์คฌ์ด์ผ ํ๋ค. ์ ๊ทผ ์ ์ด๋ ๊ธฐ๋ณธ ๊ตฌํ๊ณผ ๋ฌ๋ฆฌ
internal
๋ก๋ง ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค. - ๋ถ๋ช
์ค๋ณต๋๋ Method,
๋ค๋ก ๊ฐ๊ธฐ
,์์ธ ๋ณด๊ธฐ
์ ๊ฒฝ์ฐ ๊ฐ์์๋ ๋ถ๊ตฌํ๊ณ ๋ ๊ตฌํ์ฒด์์ ๊ฐ์ ๋ด์ฉ์ ๊ตฌํํด์ฃผ์ด์ผ ํ๋ค. extension์ ํ์ฉํ ๊ธฐ๋ณธ ๊ตฌํ์ ํ์ฉํ ์ ์์ง๋ง, ํด๋น ๊ตฌํ์ด ๋ช ๊ฐ์ ์ํ๊ฐ๊ณผ ์ฐ๊ด์ด ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ์ง ์ ์๋ Protocol์์ ๊ตฌํ์ด ๋ถ๊ฐํ๋ค. - ์ถ๊ฐ์ ์ผ๋ก ํ๋์ interface๋ก ํ์น๋ ์๊ฐ, โ์์ โํ๋ฉด์์๋ ๋ถ๊ธฐ๊ฐ ํ์ํ๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก๋ ์๋๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ณ ๋ค์ ๋ฐฉ์์ ์๋ํ๊ฒ ๋๋ค.
๋จ์ Inherence
ํ์ง๋ง๋ผ๋ ์์์ ํ๋ฒ ์ ์ฉํด๋ณด์๋ค. ๋ง๋ง ํ๋ฉด ๋จธ๋ฆฌ์ ์๋จ์ผ๋๊น. ์ผ๋จ ๋ด๊ฐ ์ํ๋ ๋ฐฉ์์ ViewController์์ ๋ ๊ตฌํ์ฒด๋ฅผ ๋ชจ๋ฅด๋๋ผ๋ ๊ฐ์ ํจ์๋ฅผ ํตํด ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด์๋ค. (๋์ค์ ๊ฐ๋ณด๋ ์ด ์๊ฐ ์์ฒด๊ฐ ์๋ชป๋๋ค๋ ๊ฒ์ ์์๋ค)
์ด๋ฐ ๋ฐฉ์์ ์๊ฐํ๋ค. ์ํ ์ ํ์ ๊ฒฝ์ฐ ์ข์ ๋ฐฉ๋ฒ์ด์๋ค. ๋ ๊ตฌํ์ฒด์์ ์ฌ์ฉํ๋ ํจ์ ์์ฒด๋ ๊ฐ์ผ๋ ์ค์ ๊ตฌํ๋ง ๋ฌ๋ผ์ง๋๊น. ๊ทธ๋ฐ๋ฐ ์ถ๊ฐํ๊ธฐ
, ์์ ํ๊ธฐ
์ ๊ฒฝ์ฐ๋ ๊ทธ๋ ์ง ๋ชปํ๋ค. ๊ฒฐ๊ตญ์๋ ๋ฃ์ด์ค ViewModel์ด ์ด๋ค ๋
์์ธ์ง ํ์
ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
๋ถ๊ธฐ๋ฅผ ์์จ ์ ์๋๊ฐ?
๊ฒฐ๊ณผ์ ์ผ๋ก ๋๋ ๋ถ๊ธฐ๋ฅผ ์์จ ์ ์๋ค๊ณ ํ๋จํ๋ ๊ฒ์ด ์คํ์ด๋ผ๋ ๊ฒฐ๋ก ์ ์ด๋ฅด๋ ๋ค. ๋ถ๊ธฐ๋ฅผ ์์จ ์ ์๊ธฐ ์ํด์๋ ๋ ๊ตฌํ์ฒด์์ ์ฌ์ฉํ๋ interface์์ฒด๊ฐ ๋์ผํด์ผ ํ๋ค. ๊ทธ๋์ผ ๋คํ์ฑ์ ํตํด ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ์์ ํ ์คํํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ ๊ฐ์ ์ํฉ์์๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋๊ฐ? ๊ทธ ๋ถ๊ธฐ๋ ํ์ฌ ๋๊ฐ ๊ฐ์ ธ๊ฐ์ผ ํ๋๊ฐ?
์ผ๋จ ์์ ๊ฐ์ ์ํฉ์ด๋ผ๋ฉด ๋ถ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณณ์ ํ์ชฝ์ผ๋ก ๋ชจ๋ ๊ฒ์ด ๋ณด๋ค ๋ง๋ค๋ ์๊ฐ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ViewModel์ ๋ถ๋ฆฌํ๊ฒ ๋ค๋ ์๋ ์์ฒด๋ ๊ฒฐ๊ตญ ์ด ๋ถ๊ธฐ ์ฒ๋ฆฌ์ ์ฑ ์์ ViewController๋ก ์ฎ๊ธฐ๊ฒ ๋ค๋ ๋ง์ด๋ค. ๊ทธ๋์ VC๊ฐ ์ด ๋ถ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋ค๊ณ ์ฝ๊ฐ์ ๋ฐฉํฅ์ ์กฐ์ ํ๋ค.
์ข์ ์ฝ๋์ ์กฐ๊ฑด
์ฌ๊ธฐ๊น์ง ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์ผ๋ฉด์ ์ด๋ค ์ฝ๋๊ฐ ์ข์์ง์ ๋ํด ์๊ฐํ๊ฒ ๋์๋ค. ๊ทธ๋ฌ๊ณ ๋ณด๋ ์ด์ ์ ๊ณต๋ถํ๋ ๋ด์ฉ์ด์๋ค. 04. OOP Implement Pattern ๋ถ๊ทผ์ ๊ตฌํ์ ์์ด ํ์ํ ๊ฐ์น 3๊ฐ์ง๋ฅผ ์ฝ์ด๋ณด์. ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์์ ๋์๋ ๋ฐฉ์๋ค์ ์ดํด๋ณด๊ณ ๋ฌธ์ ๋ฅผ ์ง์ด๋ณด๋ ค ํ๋ค.
๊ธฐ์กด์ ๊ฒฝ์ฐ
์ปค๋ฎค๋์ผ์ด์ ๊ด์ ์์ ์ด๋์ ๋๋ ํํ์ด ๊ฐ๋ฅํ๋ค. ์ฌ์ค ์ง๊ธ์ ๊ฒฝ์ฐ Method๊ฐ ๋ง์ง๋ ์๊ณ , ์๋ก ์ํตํ๋๋ฐ ํฌ๊ฒ ๋ฌธ์ ๋ ์๋ค. ๋ค๋ง, ํ์ฌ์ ๊ฒฝ์ฐ ๊ฐ์ ๋์์ ํ๋๋ผ๋ enrollMode์ธ์ง ๊ทธ๋ ์ง ์์์ง์ ๋ํด ํ๋จํ์ฌ ์ฒ๋ฆฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ถํธํ ์ ์๋ค.
์ด๋ ์์ค ํ์ผ ๊ด์ ์์ ๋ณด๋๋์ ๋ฐ๋ผ ๋ค๋ฅผ ๊ฒ ๊ฐ๋ค. ๋จ์ํจ์ด ์ฝ๊ธฐ ์ฌ์์ ๊ฐ๊น๋ค๋ ์ ์ ๊ทผ๊ฑฐํด์ ๋ณธ๋ค๋ฉด ์ด๋์ ๋๋ ๋ง๋ ๋ฏ ํ๋ค.
ํ์ฅ์ฑ์ ๊ด์ ์์๋ ์ข์ง ์์ ๋ฏํ๋ค. ํ์ฅ์ ๊ฒฐ๊ตญ์๋ ๋์์ด ์ค์ฒฉ๋๋ ์น๊ตฌ์ ๊ณ์ํด์ ๊ตฌํ์ด ๋์ด๊ฐ๊ฒ ๋๋๋ฐ, ๊ทธ๋ ๊ฒ ๋๋ฉด ์ด๋ ์๊ฐ ์์ค์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์ด ์๊ฐ์ด ์จ๋ค. ์์ ์๊ฐ ๋ณธ์ธ์ด๋ผ ์ดํดํ๋ ๊ฑฐ์ง ์ค์ ๋ก ๋ณด๋ฉด ๋ญ๊ฐ ๋ถ๋ฆฌ๊ฐ ํ์ํ๋ค๋ ๋์๊ฐ ๋๋ค.
Naive Protocol ์ฌ์ฉ์ ๊ฒฝ์ฐ
์ด๊ฑด ์ธ ์์น์ ๊ทผ๊ฑฐํด์ ์์๋ณผ ํ์๋ ์๋ค. ์ด ๋ฐฉ์์ ์์ ์๋ชป ์ฌ์ฉํ ๋ฐฉ์์ด๋ค. ํ์ฅ์ฑ์ด ์์ง๋ ์๊ณ ๊ทธ๋ฅ ์์ด ์์ง์ฌ์ ์ ์ฉํ ์์ค์ด๋ค. ์ฌ์ง์ด ๋จ์ํ์ง๋ ์๋ค.
๋จ์ Inherence์ ๊ฒฝ์ฐ
์ปค๋ฎค๋์ผ์ด์ ์ธก๋ฉด๊ณผ ๋จ์ํจ ์ธก๋ฉด์์ ์ข์ง ์๋ค ์๊ฐํ๋ค. ์ผ๋จ ๋ถ๋ชจ class๋ฅผ ๋ฐ๋ณตํด์ ์ดํด๋ณด์์ผ ํ๋ค. ์ง๊ด์ฑ์ด ๋จ์ด์ง๋ค. ์์๋ฐ์ ๊ตฌํ์ฒด๋ง ๋ฐ๋ผ๋ณธ๋ค๋ฉด ์ผ์์ ์ผ๋ก ๋จ์ํ ์ ์์ง๋ง, ์ค์ ๋ก๋ VC์์ ์กฐ์ class์ method๋ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ ์ฝ์ง ์๋ค.
ํ์ฅ์ฑ์ ๋ถ๋ถ์์๋ ๊ฐ์ฅ ์ข์ง ์๋ค. ์์์ ํ๋๋ง ํ ์ ์๋ค. ์ด์ ์ด ์ ๋ง ์น๋ช ์ ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ตฌํ์ฒด๊ฐ ํ์ํ๋ฐ, ํน์ ๋ถ๋ถ์ด ๋ค๋ฅด๋ค๋ฉด ์์ ๊ตฌ์กฐ์์ฒด๋ฅผ ํ์ด์ผ ํ๋ ๊ฒฝ์ฐ๋ ๋์จ๋ค. Object Oriented Programming์ ๋ค์ํ๋ฒ ์ฝ์ด๋ณด์.
Interface Separation Principle
๊ทธ๋์ ๋ง์ง๋ง์ผ๋ก ๋์จ ๊ฒฐ๋ก ์ ์ด๊ฑฐ๋ค. ์ ์๊ฐํด๋ณด๋ฉด ๋ ํ๋ฉด์์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ ์์ฒด๊ฐ ๋ถ์๋ค ๋ผ์๋คํ ์ ์๋ค. ์ ํํ๊ฒ ํน์ VC์์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๋ง ๋ถ์ฌ์ ์ ๊ณตํ์. ๊ทธ๋ฆฌ๊ณ VC์์ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์, ํน์ ๋ฒํผ์ด ๋๋ ธ์ ๋ Protocol Type Check๋ฅผ ํตํด ๋์์ ๊ตฌ๋ถํ์.
์ต์ ์ธ๊ฐ?
์ผ๋จ ์ปค๋ฎค๋์ผ์ด์ ์ธก๋ฉด์์ โ์ฑํํ๊ณ ๊ตฌํโ์ด๋ผ๋ ๋จ์ํ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค.
๋จ์ํจ ์ธก๋ฉด์์๋ ์ฌ๋๋ง๋ค ์ฑํฅ์ด ๋ค๋ฅผ ๋ฏํ๋ค. ์คํ๋ ค protocol์ ๋ง์ด ๋ง๋ค์ด์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฒ์์ ํ๋์ ViewModel์ ๋ฃ์ด๋๋ ๊ฒ๋ณด๋ค ๊ท์ฐฎ์ ์ ์๋ค.
ํ์ฅ์ฑ ์ธก๋ฉด์์๋ ๋ณด๋ค ์ข๋ค. ๋ง์ฝ read๋ผ๋ (์ฌ์ค ์๊ฒ ์ง๋ง..) ๋ ์์ด ์ถ๊ฐ๋๋ค๋ฉด protocol์ถ๊ฐํ๊ณ ์ฑํํด์ ๊ตฌํํ๋ฉด ๋์ด๋ค.
๋ง๋ฌด๋ฆฌ
์ด ๋ถ๋ถ์ ํ๋ฉด์ ์ ๋ง ์ด๋ ค์ ๋ค. ๋ต์ด ์๋ ๋ถ์ผ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋๋ ๋ค์ํ ๋ถ๋ค๊ณผ ํจ๊ป ์ํตํ๋ฉด์ ๊ฐ์์ ์๊ฐ์ ๋ง์ถฐ๋ณผ ์ ์์ด ์๋ฏธ์์๋ค. ISP๋ฅผ ์ ์ฌ์ฉํ๋ ๊ฒ๋ ์ข์ ์ค๋์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ๋!