KVC/KVO ๋ Apple Framework์์ ์ค์ํ ๋ถ๋ถ์ ๋ด๋นํ๋ค. ํ๋ฒ ๊ณต๋ถํด๋ณด์.
Background
03. Operation Queue์์ ๊ฐ๋จํ๊ฒ ์์๋ณด์๋ ์ ์ด ์๋ค.
์ผ๋จ ์ ์ด ๊ฐ๋ ์ด ๋์๋์ง์ ๋ํด์ ์ดํดํ๊ธฐ ์ํด์๋ Objective C๊ฐ ํ์ํ๋ค. MVC ํจํด์ด ์ต๊ณ ๋ผ๊ณ ์ฌ๊ฒจ์ง ์๊ธฐ.. Controller์ ์ญํ ์ Model๊ณผ View์ Sync๋ฅผ ๋ง์ถ๋ ๊ฒ์ด์๋ค. ์ด๋ฌํ ๊ณผ์ ์์ Controller๊ฐ ํด์ผํ๋ ์ผ์ ๋๊ฐ์ง์ด๋ค.
- Model์ ๋ณํ๋ฅผ View์ ๋ฐ์ํ๋ค.
- View์ Interaction์ ๋ฐํ์ผ๋ก Model์ ๋ฐ์ํ๋ค.
์ด๋ฌํ ๊ณผ์ ์ ์์ด์ ์ํ๊ฐ์ ๊ฒฐ๊ตญ ๋๊ธฐํํด์ฃผ๋ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋๋ค. Action์ด ์ผ์ด๋ ๋๋ง๋ค ์ด๋ฅผ ์ผ์ผํ ์ ๋ฐ์ดํธํด์ฃผ๊ธฐ ๋ณด๋ค๋ ๋ฌถ์ด์ ์๋ก ์ ๋ฐ์ดํธํ๋๋ก ํด๋๋ฉด ํธํ์ง ์์๊น? ์ด๋ฌํ ์ ์์ Objective C ์์ ๋์จ ๊ฐ๋ ์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
Key Value Coding
๋ฌธ์์ด ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ๊ฐ์ ์ ์ผ๋ก ์ก์ธ์คํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ
์์ ๋ฌธ์ ๋ฐฐ๊ฒฝ์ผ๋ก ๋ถํฐ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฒซ๋ฒ์งธ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋ค.
KVC๋ NSKeyValueCoding
์ด๋ผ๋ protocol์ ์ฌ์ฉํ๋ค. ์ด protocol์ ์ ๊ทผ์ getter์ setter๋ฅผ ์ ๊ณตํ๋ค. ์ด protocol์์ ์ ๊ณตํ๋ setter๋ฅผ ์ฌ์ฉํด์ผ, observer๋ค์๊ฒ ๊ฐ์ ๋ณด๋ผ ์ ์๋ค.(KVO์ ์ฐ๊ฒฐ)
- getter Method
valueForKey:
valueForKeyPath
- setter Method
setValue:forKey:
setValue:forKeyPath
Key๋ก ๋ค์ด๊ฐ๋ ๋ ์๋ค์ ํน์ ๊ท์น์ด ์๋ค.
- ASCII Encoding์ด์ด์ผ ํ๋ค.
- ์๋ฌธ์๋ก ์์ํด์ผ ํ๋ค.
- ๊ณต๋ฐฑ์ด ์์ด์ผ ํ๋ค.
Key๋ฅผ ๊ฐ์ง๊ณ ๊ฐ์ฒด์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ์์ ์ด๋ค. ๋ณด๋ฉด ๊ฐ์ฒด์ property์ ์ง์ ์ ๊ทผ(ObjectInstance.property
)ํ์ง ์๊ณ ๋ฌธ์์ด์ ํตํด์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค์์ KeyPath๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ค. ์ฐจ์ด์ ์ ์๊ฒ ๋๊ฐ? ์ธ์คํด์ค์ ์ง์ ์ ๊ทผํ์ง ์๊ณ , .
์ ํฌํจํ ๋ฌธ์์ด์ ํตํด ๊ฐ์ ์ ์ผ๋ก property๋ฅผ ๊ฐ์ ธ์ค๊ณ ์๋ค.
Key Value Observing
๋ค๋ฅธ ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฆผ ๋ฐ์ ์ ์๋ ๋ฉ์ปค๋์ฆ
KVO๋ KVC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์๋ค. ์ฆ, ํน์ ๊ฐ์ ๊ด์ฐฐํ๋๋ฐ ์์ด์ KVC๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ Observingํ ์ ์๋์ง, removeํ ์ ์๋์ง๋ง ์๋ฉด ๋๋ค.
์์ ์๋ ํน์ View์ frame ๊ฐ์ observing ํ๋ ์ฝ๋๋ฅผ ์ ์ด๋ ๊ฒ์ด๋ค. KeyPath๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๊ด์ฐฐํ ์ ์๋ค.
์ฌ์ฉ์ด ๋๋ ์๊ธฐ์ ์ง์์ฃผ๋ ๊ฒ๋ ์์ง ๋ง์์ผ ๊ฒ ๋ค.