
ํํ ๊ฐ๋ฐ์ ํ ๋ ๋ง์ด ๋ฃ๋ ์กฐ์ธ์ด ์์ต๋๋ค. "์ข์ iOS๊ฐ๋ฐ์๊ฐ ๋๋ ค๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ ๊ฒฝ์ ๋ง์ด ์จ์ผํด~~" ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ ๋๋ '๋ฉ๋ชจ๋ฆฌ ์ต์ ํ'์ ๋ง์ ๊ณต์ ๋ค์ด๊ณ ๋ ํ์ง๋ง, ์ฌ์ค App๊ฐ๋ฐ์ ์์ด์๋ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ ๊ฐํ ํ์์ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋์ฒด๋ก ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ '๋์ ํ ๋น' ์ด๋ผ๋ ๋ฐฉ๋ฒ์ ํตํด์ ๋ฉ๋ชจ๋ฆฌ์์ฉ๋์ ์ค์ด๋๋ฐ, ๋ง์ฐฌ๊ฐ์ง๋ก iOS ๊ฐ๋ฐ์๋ run-time์ ๋ณ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ lazy๋ผ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค! ์ ํ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ฉด lazy์ ๋ํด ์ด๋ ๊ฒ ์ ์๋์ด ์์ต๋๋ค. (์ ๊ฐ ์ดํดํ ๋๋ก ์์ฒด๋ฒ์ญ ํ์์ต๋๋ค,,) lazy property๋ ์ด property๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ๊ธฐ ์ ๊น์ง๋, ์ด๊ธฐ๊ฐ์ ๊ณ์ฐํ์ง ์๋ property์ ๋๋ค. ์ ์ ๋, property์..

๋ณธ ํฌ์คํ ์ ๊ณฐํ๊น๋์ ๊ฐ์์์์ ๊ธฐ๋ฐ์ผ๋ก, ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๋์ฑ ์์ธํ ๋ด์ฉ์, ๊ฐ์ ์์์ ์ง์ ์์ฒญํ์๋๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค! Subject ๋? ์ด์ ํฌ์คํ ๋ง๋ฏธ์, Subeject๋ผ๋ ๊ฒ์ ์ ๊น ์๊ฐํ์์ต๋๋ค. ์ดํ ํ๋ก์ ํธ์์๋ Subject๋ฅผ ๋ค๋ฃจ๋ ๋ด์ฉ์ด ๋ง์ด ๋์์, ์ด Subject์ ๋ํด ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค. Subject๋ฅผ ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด, Observable์ ํ๋ฆ์ ๋ฒ์ด๋ ์ธ๋ถ์์๋, ๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กค ํ์ฌ ์๋ก์ด ๊ฐ์ ์ง์ด๋ฃ์ด์ฃผ๋ ๋ ์์ ๋๋ค. ReactiveX ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ฉด Subject์ ์ข ๋ฅ์๋ 4๊ฐ์ง๊ฐ ์์ต๋๋ค. 1) AsyncSubject 2) BehaviorSubject 3) PublishSubject 4) ReplaySubject ๊ฐ..

๋ณธ ํฌ์คํ ์ ๊ณฐํ๊น๋์ ๊ฐ์์์์ ๊ธฐ๋ฐ์ผ๋ก, ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๋์ฑ ์์ธํ ๋ด์ฉ์, ๊ฐ์ ์์์ ์ง์ ์์ฒญํ์๋๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค! 1. ํ๋ก์ ํธ๋ฅผ MVVM ํจํด์ผ๋ก ๊ตฌ์ฑํ๊ธฐ ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์, RxSwfit์ ์ค์ ์ ์ฉ์ฌํญ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ ํด๋น ํ๋ก์ ํธ๋ MVVMํจํด์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ ํ๋ก์ ํธ์ ๋๋ค. ์งํํ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ํด๋๊ตฌ์กฐ์, View ํ๋ฉด์ ์๋์ ๊ฐ์ต๋๋ค. 1) Model : APIService๋ก ๋ฐ์์ฌ rawData ๊ตฌ์กฐ ํ์ผ 2) APIService : Menu์ Model๋ก fetching ํด์ค๋ API๊ฐ URLSession์ผ๋ก ์์ฑ ๋์ด์์ 3) MenuViewController : tabelView๋ก ๊ตฌ์ฑ๋ ํ ํ๋ฉด ViewContr..

ํด๋น ํฌ์คํธ๋ ๊ณฐํ๊น๋์ ๊ฐ์์์์ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์์์ ์ง์ ๋ณด์๋๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค..! 1. Operator๋? RxSwift์ ์ฉ๋๋ฅผ ๋ค์ ์ ๋ฆฌํด๋ณด๋ฉด, ๋น๋๊ธฐ์ ์ผ๋ก ์๊ธฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํด๊ฐ์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํด Observable์ด๋ผ๋ ํด๋์ค๋ก ๊ฐ์ธ์ ์ ๋ฌํ๊ธฐ ์ํจ ์ผ๋ก ์ ๋ฆฌํ ์ ์์ต๋๋ค. ์์ ์ฌ์ง 2์ฅ์ ์ด๋ฌํ RxSwift๋ฅผ ์ฌ์ฉํ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ์ฝ๋ ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ onError() / onNext() / onCompleted() ๋ถํฐ ์์ํด์ ~ .next() / .error() / .completed() ๊น์ง,,,, ๊ธฐ๋ณธ์ ์ธ ์ฝ๋์กฐ์ฐจ๋ ๋๋ฌด ์จ์ผํ๋ ๊ฒ๋ค์ด ๋ง๊ณ ๋ณต์กํด ๋ณด์ ๋๋ค. ๊ทธ๋์, Rx์๋ ์ด๋ฐ ๊ท์ฐฎ์ ์ฝ๋๋ค์ ๊ฐํธํ๊ฒ ์ค์ฌ์ฃผ๋ ๋ฌธ๋ฒ๋ค์ด ์กด์ฌ..

ํด๋น ๊ธ์, ๊ณฐํ๊น๋์ [RxSwift 4์๊ฐ์ ๋๋ด๊ธฐ ์์ฆ2] ์์์ ๋ณด๋ฉด์ ์ค์ค๋ก ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ์๋ฌด๋๋ ๊ณต๋ถ ํ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ๋ชฉ์ ์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์, ๋ด์ฉ์ ๋ํ ์์์ ์ธ ํด์์ด ๋ง์ด ๋ค์ด๊ฐ ์์ ์ ์์ต๋๋ค ๐ญ ๋ฐ๋ผ์, RxSwift๋ฅผ ์ ๋๋ก ๊ณต๋ถ ํด ๋ณด๊ณ ์ถ์ผ์ ๋ถ๋ค์ ๊ณฐํ๊น๋์ ๊ฐ์๋ฅผ ์ง์ ๋ค์ผ์๋ฉฐ ๊ณต๋ถ ํด ๋ณด์๋๊ฒ์ ์ถ์ฒ ๋๋ฆฝ๋๋ค!!! RxSwift ๊ฐ๋ ์ก๊ธฐ (๋ฑ์ฅ ๋ฐฐ๊ฒฝ + ๊ธฐ๋ณธ ๊ตฌ์กฐ) ์ข์ธก์ ์ฝ๋๋ฅผ ๋์ ์์ผ์, ์ฐ์ธก๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ํ๊ณ ์ถ๋ค. ์ด๋, ์ ์์ ์ผ๋ก ๋์ ํ๋ค๋ฉด 1. ์ธ๋์ผ์ดํฐ UI๋ ธ์ถ 2. ์๊ฐ์ ๊ณ์ ํ๋ฌ๊ฐ 3. ๋ฐ์ดํฐ ๋ฐ์์ค๋ฉด text๋ก ํํ ์ด 3๊ฐ์ง์ ๋์์ด ๋์์ ์ด๋ค์ ธ์ผํ์ง๋ง, ์ค์ ๋ก๋ ์ธ๋์ผ์ดํฐ๋ ๋ ธ์ถ์ด ์๋๊ณ ๋คํธ์ํน ๋์์ด ์ผ์ด๋๋ ..

์ ํ ๊ณต์๋ฌธ์์ ์๋ info.plist์ ๋ํ ๋ด์ฉ์ ํด์ํด๋ณด๋ฉด, "์ฌ์ฉ์์๊ฒ ๋ ๋์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด iOS์ macOS๋ ๊ฐ ์ฑ์ด๋ ๋ฒ๋ค์ ํน๋ณํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃน๋๋ค. ์ด ๋ฉํ๋ฐ์ดํฐ๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค" ๋ผ๊ณ (?) ์ดํดํ ์ ์์ต๋๋ค.... ์ฌ๊ธฐ์ ์ค์ํ ๊ฑด, '๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค' ๋ผ๋ ๋ถ๋ถ์ธ๋ฐ์..! ์ฝ๊ฒ ๋งํด์, info.plist๋ ์ฑ์ด๋ ํ๋ฌ๊ทธ์ธ์ ํ์ํ ์ฌ๋ฌ ๊ฐ์ง ์ค์ ๋ค์ ์ ๊ณตํด์ฃผ๋ XML ํ์ผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค~ ์ด๋ฌํ ๋ฐ์ดํฐ๋ค์ ๋ชจ๋ [key:value]์ ๋์ ๋๋ฆฌ ํํ๋ก ์ ๊ณต์ด ๋ฉ๋๋ค. Xcode๋ ์น์ ํ๊ฒ๋ ์ค์ํ Key์ ๊ฒฝ์ฐ์ ์๋์ผ๋ก info.plist์ ์ถ๊ฐ๋ฅผ ํด์ฃผ๋๋ฐ, ์ด๋ฌํ ํค๋ CF์ ๋์ฌ๋ก ์์ํ๊ณ Core Foundation keys ๋ผ๊ณ ๋ถ๋ฆ ๋..