ํ๋ก์ ํธ์ ํด๋ ๊ตฌ์กฐ๋ฅผ ํ์ ํด์ฃผ๋ ๋๊ตฌ์ธ Codeface๋ฅผ ์๊ฐํด ๋ณด๊ณ ์ ํฉ๋๋ค. ์ด์ ๊ฐ์ ํด์ด, ๊ธฐ์กด์๋ ์์๋์ง๋ ๋ชจ๋ฅด์ง๋ง, ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ ์๊ฐํ๋๋ก ํ๊ฒ ์ต๋๋ค. Codeface ์ค์น ์ฐ์ ๊ณต์ ์ฌ์ดํธ์ ๋ค์ด๊ฐ๋๋ค. https://codeface.io/ Codeface See the Architecture of any Codebase codeface.io ํด๋น ์ฌ์ดํธ์ ๋ค์ด๊ฐ๋ฉด ํ๋จ์, ์ฑ์คํ ์ด ๋งํฌ๊ฐ ์์ผ๋ ์ค์น ํด์ค๋๋ค. ์ด ๋๊ตฌ๋, LSPService๋ผ๋ ์คํ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ณต๋๋ ์๋น์ค ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๋จผ์ LSPService๋ฅผ ์ค์น ํด์ค๋๋ค. ๊ณต์์ฌ์ดํธ ์ตํ๋จ์ ์๋ LSPService ๋งํฌ๋ฅผ ๋๋ฅด๋ฉด, ์ค์น ๋ฐฉ๋ฒ์ ๋ํด ๋์ต๋๋ค. ์ด๋ํ ๋งํฌ์์, ๊ฐ์ ํ๋ก์ธ..
Clean Architecture๋ฅผ ๊ณต๋ถํ๋ฉด์ ํท๊ฐ๋ฆฌ๋ ๊ฐ๋ ์ด์๋ '์์กด์ฑ ์ฃผ์ (Dependency Injection)'์ ๋ํ ์ ๋ฆฌ๋ฅผ ํ๋ ค๊ณ ํฉ๋๋ค. ๋ค๋ง, Clean Architecture์ ๋ํ ์ ๊ณผ์ ์ ๋ค๋ฃจ๋ ๊ธ์ด ์๋๋ ์ด ์ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค. ๋ํ ์๋ฒฝํ ๊ธ์ด ์๋๋ค๋ณด๋, ์๋ชป๋ ๋ด์ฉ์ด ์์ ์ ์์ผ๋ ๋ง์ ์ง์ ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค! :) ์์กด์ฑ(Dependency)์ด๋? ํํ, Clean Architecture์ ๊ฐ์ฅ ์ค์ํ ์์น์ ์ค๋ช ํ ๋ "๊ฐ ๊ณ์ธต(Layer)์ ์๋ก ๋ ๋ฆฝ์ ์ด์ด์ผ ํ๋ฉฐ, ํ ๊ณ์ธต์ ๋ณํ๊ฐ ๋ค๋ฅธ ๊ณ์ธต์ ์ํฅ์ ์ฃผ์ด์๋ ์๋๋ค!" ๋ผ๊ณ ์ค๋ช ํฉ๋๋ค. ์ฌ๊ธฐ์ ๋งํ๋ '๊ณ์ธต์ด ์๋ก ๋ ๋ฆฝ์ ' ์ด๋ผ๋ ๋ง์, ๊ฐ ๊ณ์ธต์ ๊ฒฐํฉ๋๋ฅผ ์ต์ํ ํ๋๊ฒ์ ์งํฅํด์ผํ๋ค๋ ๋ง ์ ๋๋ค. ํ์ง๋ง, iO..
์น๋ทฐ๋ฅผ ๋จ์ํ ๋ถ๋ฌ์ค๊ธฐ๋ง ํ๋ฉด, iOS์์ ๋ง์ด ์ฌ์ฉํ๋ ์ค์์ดํ ์ ์ค์ณ๋ฅผ ํตํด ๋ค๋ก๊ฐ๊ธฐ & ์์ผ๋ก ๊ฐ๊ธฐ ๋์์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ ํฉ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ , ์๋์ ์ฝ๋์ ๊ฐ์ด ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค. extension ViewController: WKNavigationDelegate { override func viewDidLoad(){ //MARK: ๋ธ๋ฆฌ๊ฒ์ดํธ ์ ์ธ webView.navigationDelegate = self view.addSubview(webView) if let url = URL(string:"๋ณธ์ธ์ด ํจํค์ง ํ ๋๋ฉ์ธ"){ let request = URLRequest(url:url) webView.load(request) } //MARK: ์ค์์ดํ ์ ์ค์ณ๋ก ๋ค๋ก๊ฐ๊ธฐ&์์ผ๋ก๊ฐ๊ธฐ webV..
RxSwift๋ฅผ ์ฌ์ฉํ์ง ์์ KeyboardNotification ๋ค๋ฃจ๊ธฐ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด, TextField๋ฅผ ์ ํํ์์ ๋ ํด๋น TextField์์ญ์ KeyBoard๊ฐ ์นจ๋ฒํ์ฌ [1] ์์ฑํ๋ ๋ด์ฉ [2] ์๋ฃ ๋ฒํผ ๋ฑ์ ๊ฐ๋ฆฌ๋ ์ด์๊ฐ ๋ฐ์ํ๊ณค ํฉ๋๋ค. ํด๋น ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ Notification์ด๋ผ๋ Class๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. UIScrollView ๋ด๋ถ์ ์ ์๋์ด ์๋ TextField์ ๊ฒฝ์ฐ์๋ ์๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด TextField๋ฅผ ์ ํ ํ์์ ๋, KeyBoard์ ๋์ด๋งํผ ScrollView๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. class SignUpViewController: BaseViewController{ var keyBoardUpDown = false override fu..
์ค๋์, ์ด์ ์ ํฌ์คํ ํ ๊ธ์ ์ด์ด์ MVVM ํจํด์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ์์ ์์๋ดค๋ MVCํจํด๊ณผ ์ด๋ค์ฐจ์ด๊ฐ ์๋์ง๋ฅผ ํ์ธํ๋ฉฐ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. โป ๊ธ ์์ฑ์ ์๋ชป ๋ ๋ด์ฉ์ด ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ์๋ชป๋ ๋ด์ฉ ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.!! MVVMํจํด์ ์์ฃผ ํ๋ฅญํ ๋์์ธ ํจํด์ ๋๋ค. Model๊ณผ View๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์๊ณ ์๋ component์ธ๋ฐ, MVC์ ๋ค๋ฅด๊ฒ View Model๋ผ๋ ์๋ก์ด ์ค์ฌ์๊ฐ ๋ฑ์ฅํฉ๋๋ค. (์ฌ์ค MVVM๊ณผ Apple's MVC ์ฌ์์ด ์๋ MVP๋ชจ๋ธ์ ์์ฃผ ๋น๊ตํ๊ณ ๋ ํ์ง๋ง, ์ฐ๋ฆฌ๋ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.) ๋ํ, ์ด๋ฏธ ์๊ณ ์๋ Model๊ณผ View์ ์ญํ ๋ ์กฐ๊ธ ๋ฐ๋๊ฒ ๋๋๋ฐ, ์ด์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. 1. Model - Model์ ๋ฐ์ดํฐ,..
์ด์ ๊น์ง๋ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๋์์ธ ํจํด์ด๋ ์ํคํ ์ณ์ ํฌ๊ฒ ์ ๊ฒฝ์ ์ฐ์ง ์๊ณ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฒ์ ๋์๋ฆฌ์์ ์ฑ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ๊ฐ์ธ์ฑ๋ณด๋ค ๋น๋ํด์ง ์ฑ๊ฐ๋ฐ์ ์งํํ๋ค๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ ์ข ๋ ํจ๊ณผ์ ์ธ ์ฝ๋๊ด๋ฆฌ๋ฑ์ ์๊ฐํ๊ฒ ๋์๊ณ ๊ทธ๋ ๊ฒ ๋์์ธ ํจํด์๋ํด ์กฐ์ฌ๋ฅผ ํด๋ณด๊ฒ ๋์์ต๋๋ค. ๋์์ธํจํด์ ๋ํด ์กฐ์ฌ๋ฅผ ํ๋ค๋ณด๋, ์๋นํ ๋ง์ ๋์์ธ ํจํด์ด ์๋๋ผ๊ตฌ์? ๊ทธ๋๋ ๊ทธ ์ค์์, ๊ฐ์ฅ ๋์ค์ ์ผ๋ก(?) ๊ณต๋ถ๊ฐ ๋๊ณ ์๋ MVVMํจํด์ ๋ํด ์กฐ๊ธ ๊ณต๋ถ๋ฅผ ํด ๋ณด์์ต๋๋ค. (์ฌ์ค, ํ์ฌ ์ฑ์ด MVC๋ก ์ ์์ด ๋์ด์๋๋ฐ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง ํ๋ คํ๋ค๋ณด๋ ์๋ฃ๊ฐ ๋ ๋ง์ ๋์์ธ ํจํด์ ๊ณต๋ถํ๊ฒ ๋์์ด์ ใ ,,,) ์์ง ๊ณต๋ถ๊ฐ ์์ ํ ๋ ๊ฒ์ ์๋์ง๋ง, ์ ๊ฐ ์๋ฃ๋ค์ ์ฝ์ด๋ณด๊ณ ์ฐพ์๋ณธ ๋ด์ฉ์ผ๋ก ์ ๋ฆฌ๋ฅผ ํด๋ณผ๊น ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ..
์ค๋์ ๊ฐ๋ฐ์ ํ ๋, ๋ง์ด ๋ค์ด๋ณธ ์ฑ์ ์๋ช ์ฃผ๊ธฐ๋ ๋ฌด์์ธ์ง ๊ฐ๋จํ๊ฒ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. (๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถ ํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ธฐ๋กํ๊ธฐ์ํด ์์ฑํ๋ ๊ธ์ด๊ธฐ ๋๋ฌธ์, ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค. ) . . . ์ผ๋จ ๊ธฐ๋ณธ์ ์ผ๋ก iOS์์ ์๋ช ์ฃผ๊ธฐ์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํ ๋ iOS 13.0 ๋ฒ์ ์ด์ ๊ณผ ์ดํ๋ก ๋๋์ด์ ์ค๋ช ์ ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ ์๋์ ๊ฐ์๋ฐ, iOS 13.0 ์ด์ ์๋ Scene์ด๋ผ๋ ๊ฐ๋ ์ด App์ผ๋ก ๋ถํฐ ๋ถ๋ฆฌ๊ฐ ๋์ง ์์์ง๋ง, ์ดํ ๋ฒ์ ๋ถํฐ๋ AppDelegate์ SceneDelegate๋ก ๋ถ๋ฆฌ๋์ด ์๋ก ๋น์ทํ์ง๋ง ๋ค๋ฅธ ๊ฐ๋ ์ ๊ฐ์ง๊ฒ ๋๋ค. ์ด์ฒ๋ผ AppDelegate์ SceneDelegate๊ฐ ํ๋ ์ญํ ์ด ๋ถ๋ฆฌ๊ฐ ๋์๊ธฐ ๋๋ฌธ์, ์ ๋ 13.0๋ฒ์ ์ดํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑํ๊ฒ ์ต๋๋ค. ..
์ค๋์ iOS ๊ฐ๋ฐ์ ํ๋ฉด ๋น ์ง ์ ์๋ Delegate์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค! ์ฌ์ค, ์ ๊ฐ ์ฒ์ iOS ๊ฐ๋ฐ์ ์์ํ์ ๋, ์ ์ผ ์ฒ์ ๋ง์ฃผ์ณค๋ ๋๊ด์ด ์ด Delegateํจํด์ ์ดํด์๋,,,, ๊ทธ๋์, ์ดํดํ๊ธฐ ์ฝ๊ฒ test์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ค์ ์ด๋ป๊ฒ ๊ตฌํ์ด ๋๊ณ , ๋์์ด ๋๋์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค! (๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถ ํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ธฐ๋กํ๊ธฐ์ํด ์์ฑํ๋ ๊ธ์ด๊ธฐ ๋๋ฌธ์, ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค. ) . . . Delegate๋? Delegate๋ฅผ ์๊ธฐ ์ํด์๋ ๋จผ์ ‘protocol’ ์ด๋ผ๋ ๊ฐ๋ ์ ๋ํด ์์์ผ ํฉ๋๋ค. ์๋ํ๋ฉด, Delegate๋ ์ฌ๋ฌ๊ฐ์ ํ๋กํ ์ฝ์ ์งํฉ(?)์ผ๋ก ๊ตฌํ์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฌํ ํ๋กํ ์ฝ์ ๋ค๋ฅธ ์ธ์ด์ ๋น๊ต๋ฅผ ํ์๋ฉด, Java์์ ์ฌ์ฉํ๋ ‘์ถ์ ํด๋์ค'์..