지극히 저의 주관적인 생각입니다. MVVM의 장점 : Testable하다. -> ViewModel이 View와 독립적이다! MVVM View에서의 Action을 ViewModel로 전달합니다. 이후 ViewModel은 해당 로직에 맞는 작업을 다른 Model에게 요청하고, 이의 응답을 ViewModel State에 업데이트합니다. View는 ViewModel State를 구독하여 State의 변화가 있을 때 View를 업데이트합니다. 오늘도 +, - 버튼을 넣어보겠습니다. :) 저번 MVC글에서는 오토레이아웃을 적용했는데.. SnapKit없이 쓰기에 정말 간단한 예제임에도 layout관련 코드가 너무 늘어다더라구요.. 그래서 이번엔 스토리보드를 사용하였습니다. - View ( ViewController ..
MVC의 구현방법부터 테스트코드까지 다뤄보겠습니다. https://eastbyeden.tistory.com/8 [Swift][MVC] MVC는 무엇일까? MVC패턴은 ios개발에 사용되는 아키텍쳐(MVC, MVP, MVC-N, MVVM, VIPER) 중 하나입니다. 먼저 아키텍쳐의 사용이유는 - 개체들의 책임을 균형있게 분리하기 위해 (Solid의 Single Responsibility Principle - 단일.. eastbyeden.tistory.com 이전의 MVC소개글 입니다. MVC보다 MVVM을 채택하는 이유는 무엇일까요? 라고 하면 당장 떠오르는 이유는 2가지입니다. 1. Testable하지 않다. 2. Massive ViewController. Testable하지 않은 이유. -> MVVM..
이전부터 공부하던 Dependency에 대해 공부하다 보니, 같은 코드를 여러 프로젝트에서 적용하게 되었고 "아예 cocoapods를 만들어볼까?"는 생각으로 만들게 되었습니다. 1. 의존성 주입 방식. 2. EbonyDependencyKit 사용방법. 링크 : https://github.com/rising-jun/EbonyDependencyKit GitHub - rising-jun/EbonyDependencyKit Contribute to rising-jun/EbonyDependencyKit development by creating an account on GitHub. github.com 1. 의존성을 주입 라이브러리는 크게 Pure와 Swinject가 있습니다. Pure는 AppDelegate에서..
개인적으로 생각하는 Moya를 다룬 포스트입니다. Moya가 등장한 계기는 Alamofire와 URLSession에 있습니다. URLSession의 코드를 더 가독성 좋게 작성하기 위해 나온 라이브러리가 Alamofire입니다. 하지만 Alamofire도 테스트 코드를 작성하기 위해서는 URLProtocol을 사용해야 했습니다. 그렇기에 이를 테스트하기 좋게 하기 위해 Alamofire를 한번 더 추상화한 라이브러리가 Moya입니다. 이러한 내용들로 보아 Moya는 URLSession보다 코드 가독성이 좋고, URLProtocol보다 테스트하기 편하다는 장점이 있다 생각합니다. Github에서 token을 가져오는 API 사용 로직을 구현해보겠습니다. 사용법 import Moya enum GithubAP..
2021년 취업준비를 하며 보았던 iOS개발자 채용 공고들 중 RxSwift, MVVM, MVC만큼이나 많이 볼 수 있었던 단어가 있었습니다. "HIG" = Human Interface Guide https://developer.apple.com/design/human-interface-guidelines/ Human Interface Guidelines - Design - Apple Developer Human Interface Guidelines Get in-depth information and UI resources for designing great apps that integrate seamlessly with Apple platforms. developer.apple.com HIG를 알아야 ..
저번에 주입한 의존성 주입 코드를 테스트해보겠습니다. 1. 서버가 없다 가정하고, 목데이터 책 펙토리 생성 후 책 정보를 가져오기. 2. 테스트 코드 추가, 실행 3. 서버가 생겼다 가정하고, 목데이터로 된 펙토리, 서버에서 가져오는 로직으로 바꾸기. 4. 테스트 코드 실행 의존성 주입을 함으로써 코드 테스트가 간편해진 이유는 "서버에서 책을 가져온다"는 동작을 추상화 했기에!! 의존성 주입의 필요성을 저번 포스트와 함께 작성하다 보니, 이의 필요성을 느끼는 것 같습니다. class MyTest: XCTestCase { let bookMakable = MockBookFactory() let testMockClass = TestMockClass() func testMockData() throws { let..
이번주 포스트의 주제는 NotificationCenter입니다. https://developer.apple.com/documentation/foundation/notificationcenter Apple Developer Documentation developer.apple.com A가 B에게 카톡을 보내면 B의 폰에 알림이 옵니다! A가 B에게 카톡을 "보내면" B의 폰에 "알림"이 옵니다. 어떠한 이벤트에 대해 구독하고, 해당 이벤트가 일어나면 알림을 주는 역할이 NotificationCenter입니다. NotificationCenter는 URLSession, UserDefault와 같이 default를 통해 싱글톤을 사용할 수 있습니다. NotificaiionCenter.default.post(na..
SOLID 중 D(DIP) -> Dependency Inversion priciple. 의존성 주입을 공부하였습니다. 의존성 주입 방법! 의존성 역전이 있고, 의존성을 당겨오는 방식도 있었습니다. 이를 도와주는 라이브러리는 스위프트에서 Swinject, Pure등이 있었습니다. 의존성 주입의 장점! 유지보수가 좋아진다. 테스트 하기 좋아진다. "이런 이유가 있으니 나는 의존성 주입을 공부하는거야~" 라고 생각 했는 데.. ??? : 의존성 주입 왜해? 나 : 결합도를 낮추고 응집도를 높여야 되니까! ??? : 왜? 나 : 결합도가 높다면, 한 곳에 변화가 생겼을 때, 해당 부분과 결합도가 높은곳에서 또 수정을 해야 할 수 있어. ??? : 그래? 잘 모르겠는 데? 그게 어떤 경우길래? 나 : .... ?..
얼마전 스승님과 "1주일에 1번씩 블로그 포스팅을 할 수 있도록 노력해보겠다."는 약속을 하였습니다. 그동안 공부하며 기능적인 내용들보다는 되게 많이 고민하고, 개인적으로 어렵다 느꼈던 내용들을 위주로 정리해 두려 합니다. 22년 첫번째 포스트 주제! 바로 GCD!!! ( 비동기로 하나의 데이터를 작업할 때 사용법 ) 얼마 전 API주소의 이미지들을 URLSession을 사용하여 가져오고, 이를 이미지배열에 하나씩 넣고 있었습니다. 근데 갑자기 쓰레드에서 오류가 나면서 이미지가 안들어 오더군요.. 오류가 난 이유가 비동기로 실행되는 작업들은 각각 다른 쓰레드에서 실행이 되고 (1번 쓰레드의 작업이 빨리 끝난다면 해당 쓰레드가 재활용 될 수 있음 ) 만약 작업내용이 하나의 자원에 접근하고 있다면!? cla..
저번 포스트에서의 목표를 그대로 RxAlamofire를 적용시켰습니다. RxAlamofire, RxCodable, RxSwift를 사용하였습니다. AirModel 클래스를 생성합니다. 방식은 저번과 같지만 Rx를 사용할 수 있다는 장점이 있습니다. Rx 사용 시 비동기로 받는 데이터를 조금 더 편하게 수정, 전달하고 사용할 수 있습니다. 이번엔 Rx를 사용하는 만큼 프로토콜 대신 PublishSubject를 사용하여 비동기로 데이터를 전달하겠습니다. RxAlamofire.requestData를 사용하여 이전과 같이 메소드, url, 파라미터를 전달합니다. 이후 Observable에서 저희는 Data를 사용하겠습니다. ( .map{$1} ) .map을 이용하여 json데이터를 파싱합니다. ( RxCodab..