본문 바로가기

분류 전체보기

(97)
[If kakao 후기] 카카오뱅크 iOS 프로젝트의 모듈화 여정: Tuist를 활용한 모듈 아키텍처 설계 사례 본문 내용은 모두 if kakao에서 진행된 세션을 바탕으로 정리되었고, 사진 자료 또한 발표 자료에서 가져왔음을 밝힙니다. https://if.kakao.com/2022/session/88 아키텍쳐 알아보기 1. MVVM의 데이터 바인딩을 이용하여 모델과 UI 간의 동기화 - > 비대해지는 viewModel - > Routing이 정형화되어 있지 않음 2. 2019년에 MVVM => RIBs로 전환함 RIBS는 템플릿을 제공하여 일관성 있는 코딩을 하게 해주고, 프로토콜 지향 프로그래밍으로 테스트 코드가 가능하다. 응집도 높은 코드와 Routing 기능이 된다. 단점은 기능 단위로 많은 파일이 생성된다는 점이 있다. 모듈화의 필요성 2020년 8월 31일 기준 11,000개 파일에 104만줄의 코드가 ..
[If Kakao 후기] QA 엔지니어가 바라본 모바일 자동화 테스트 본문 내용은 모두 if kakao에서 진행된 세션을 바탕으로 정리되었고, 사진 자료 또한 발표 자료에서 가져왔음을 밝힙니다. https://if.kakao.com/2022/session/96 QA엔지니어가 바라본 모바일 자동화 테스트 자동화 테스트는 개발자들이 진행할 경우 코드 관점에서 더 이점이 있다고 한다. QA 관점에서는 테스트에 대한 여러 방법론과 경험을 통해 아이디어를 낼 수 있다. 1. 다양한 변수 풀 테스트를 해도 어려울 수 있다. 특정 조건에만 발생하는 이슈들을 자동화 테스트를 통해서 검증할 수 있다. 따라서 자동화 테스트와 메뉴얼 테스트를 병행하면 된다. 자동화 테스트는 갱신에 드는 시간과 같은 것들도 검증할 수 있다. Consistency는 제품 품질의 일관성 확보에 도움을 준다. 세 ..
[Tuist 3.12.0] Tuist 및 Local Swift Package를 이용해 Platform 간 Source code 공유하기 Tuist 및 Local Swift Package를 이용해 Platform 간 Source code 공유하기 문제 Tuist Modular Architecture로 구현된 프로젝트에서 Core와 Domain의 요소들을 app과 watchApp 사이에 공유하고자 했습니다. Core와 Domain 모듈은 dynamic framework로 구현되어 있는 상황인데, tuist의 manifest를 통해 framework를 생성하면 platform이 specific하게 고정되어 버립니다. 시도1 : Swift Package는 소스코드의 형태로 export 할 수 있기에, 공유하고자 하는 소스와 리소스를 Swift Package의 형태로 만들어 사용하고자 했습니다. - xcframework의 형태로도 unversal..
[RxSwift] Operator (1편 - Combining Operator: SwitchLatest, Merge) Combining Operator SwitchLatest 🐣 두 개의 옵저버블 간에 원하는 옵저버블만 구독할 수 있게 전환하는 스위치 역할! 정의 🐣 Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. Each time a new inner observable sequence is received, unsubscribe from the previous inner observable sequence. 옵저버블 시퀀스들의 옵저버블 시퀀스를 가장 최근의 옵저버블 시퀀스로부터 값을 생성하는 옵저버블..
[RxSwift] RxSwift 기본 (2편 - RxCocoa) [Swift] RxSwift 기본 1편 : Observable, Observer, Subject RXCocoa RxCocoa는 UI 작업에 필수적인 라이브러리입니다. RxCocoa는 RxSwift의 companion 라이브러리로, UIKit과 Cocoa 프레임워크 기반 모든 클래스를 가지고 있습니다! (RxSwift는 UIKit에 대한 정보가 없음) RxCocoa를 사용하여 UIButton의 Tap 이벤트, 테이블뷰의 delegate Method(didSelectItemAt)등 여러가지 기능들을 쉽게 사용할 수 있습니다~! 아래는 RxCocoa에서 UIKit의 여러 요소들을 익스텐션하는 모습입니다. 📌 Relay RxCocoa는 UI 작업을 돕기 위한 라이브러리인 만큼, Subject를 Wrapping하..
[Design Pattern] 빌더 패턴 (Creational Pattern - 1) 생성 패턴(Creational Pattern) 생성패턴은 객체의 생성에 관련된 패턴으로, 객체의 생성 절차를 추상화하는 패턴이다. 객체를 생성하고 합성하는 방법 / 객체의 표현방법과 시스템을 분리한다. 🐣 디자인 패턴은 어떠한 문제가 발생할 때, 효과적으로 해결하기 위해서 만든 패턴. 많은 개발자들이 쌓아온 솔루션과 같은 것이다. 생성 패턴은 어떤 문제를 해결할 수 있을까? 특징 객체의 생성과 조합을 캡슐화해서, 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다. 따라서, 특정 객체를 추가하거나 변경을 하는 비용을 줄이도록 하는 방법이다. 종류 추상 팩토리 패턴 동일한 주제의 다른 팩토리를 묶어준다 빌더 패턴 생성과 표기를 분리해 복잡한 객체를 생성한다 팩토리 ..
[Combine] @dynamicMemberLookup 어트리뷰트로 assign에 사용할 keyPath 자동완성하기 지난 글에서 RxSwift와 Combine의 Binding 방식에 대해 알아보며, Combine에서도 RxSwift의 Binder 및 Bind와 같은 방식을 사용할 수 있는 방법을 고민해 보았습니다. https://jazz-the-it.tistory.com/70 [Combine] Combine과 RxSwift의 UI Binding 방식 비교(Feat. assign과 KeyPath) RxSwift와 Combine으로 Clean Architecture 구조 프로젝트를 각각 진행하며 느낀점 최근에 Combine과 RxSwift를 이용한 프로젝트를 각각 진행하고 있습니다. 두 프레임워크 모두 Swift에서 Reactive한 Programming을 jazz-the-it.tistory.com 근본적인 문제는 com..
[Combine] Combine과 RxSwift의 UI Binding 방식 비교(Feat. assign과 KeyPath) RxSwift와 Combine으로 Clean Architecture 구조 프로젝트를 각각 진행하며 느낀점 최근에 Combine과 RxSwift를 이용한 프로젝트를 각각 진행하고 있습니다. 두 프레임워크 모두 Swift에서 Reactive한 Programming을 편리하게 만들어줍니다. Combine보다는 RxSwift를 사용한 경험이 많았기에, Combine을 이용한 Clean Architecture를 구현하면서 자연스레 RxSwift와 비교하게 되는 일이 많았습니다. 그 중에서 가장 주요하게 느꼈던 점은, RxSwift가 참 편리하다는 것입니다. 개인적인 의견으로는 프로그래밍 상으로는 RxSwift가 훨씬 많은 기능을 제공하기에 간결한 코드, 쉬운 프로그래밍이 가능한 것 같습니다. 실제로 Combine..
[Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (6편 - ParameterEncoding을 통해 여러 Encoding 방식 대응하기) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (1편 - Foundation Setting) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (2편 - Services, Routers 구현) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (3편 - body, queryBody, requestPlain, Multipart 구현) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (4편 - EventLogger로 통신 결과 확인하기) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (5편 - I..
[Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (5편 - Interceptor를 통해 네트워크 에러 및 토큰 갱신 처리하기) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (1편 - Foundation Setting) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (2편 - Services, Routers 구현) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (3편 - body, queryBody, requestPlain, Multipart 구현) [Swift] Alamofire를 Moya처럼 사용해보자! By Router Pattern (4편 - EventLogger로 통신 결과 확인하기) 4편에서는 EventLogger를 구현하여 통신 결과를 확인하는 Plugin을 구현했습니다. 이번에는 I..