🍎 iOS 29

클린 아키텍처인 사이드 프로젝트 리팩토링하기

현재 진행중인 사이드 프로젝트가 클린 아키텍처로 되어있는데, 팀원 개발자분과 클린 아키텍처에 관해 이야기를 나누다가기존 프로젝트 소스코드에서 몇가지 클린 아키텍처에 위배되거나 개선했으면 하는 사항들이 있어서 이부분을 정리해보고자 한다. 1. 클린아키텍처 개념 리뷰이전에 MVVM으로 되어있는 프로젝트를 클린아키텍처로 리팩토링하면서 해당 블로그글을 썼는데,다시 한번 개념을 간단하게 리뷰해보자 클린아키텍처는 Data Layer, Domain Layer, Presentation Layer 3가지 레이어가 존재한다. 1) Data Layer (데이터의 원천, 혹은 이를 가져오거나 저장)- 데이터 원천에 대한 Model인 DTO (ex. API의 response)- 원천 데이터(DTO)를 가져오고 보관하는 Data..

[Combine] Combine vs RxSwift 비교 위주 Combine 개념 정리

1. Combine이란?공식문서: https://developer.apple.com/documentation/combineCustomize handling of asynchronous events by combining event-processing operators이벤트 처리 연산자를 결합하여, 비동기 이벤트 처리를 커스터마이징할 수 있는 프레임워크 즉, Apple에서 만든 RxSwift 와 같은 프레임워크라고 할 수 있고, 더 간결하고 다양한 연산자를 활용해 더 다양한 비동기 처리를 할 수 있도록 도와주는 프레임워크이다. 필자는 기존에 RxSwift를 활용하여 비동기 처리를 하는 데 익숙했기에 RxSwift와 비교하여 그 특징을 정리하고, 사용법을 간단하게 정리해보고자 한다. 2. Combine의 3..

[SwiftUI] NavigationView vs NavigationStack

안녕하세요 ~! SwiftUI를 공부하던 중, iOS 16 이후로 NavigationStack이 등장하게 되면서,NavigationView가 훗날 deprecated될 예정이라는 내용을 보고, 2개가 어떻게 다른지 살펴보고자합니다. * 공식문서: https://developer.apple.com/documentation/swiftui/navigationview NavigationView | Apple Developer DocumentationA view for presenting a stack of views that represents a visible path in a navigation hierarchy.developer.apple.com1. NavigationView- 기존 UIKit의 UINav..

🍎 iOS/SwiftUI 2025.05.30

[iOS] 자체 private repository 라이브러리 Cocoapods 배포하기

회사에서 주요 비즈니스 로직에 사용되는 코드 모음을 개발할 필요가 있었는데, 이 사이즈가 크기도 하고 평소에 나만의 라이브러리를 만드는것에 관심이 있어서, 단순 프로젝트 내 코드 모음이 아닌 사내 라이브러리를 배포해보기로했다. *해당 글은 사내에서 사용할 라이브러리이기 때문에 private repository 에서 Cocoapods로 배포하는 과정이므로 공개 repository 배포와는 과정이 조금 다를 수 있습니다. 먼저 private repository를 Cocoapods으로 배포하여 라이브러리 형태로 사용하기 위해서는 2가지 레포지토리가 필요하다.- pod repository (개발한 라이브러리 코드 레퍼지토리)- podspec repository(해당 Cocoapods 라이브러리의 podspec을..

[iOS] Xcode Cloud를 활용하여 iOS CI/CD 환경 구축하기

1. iOS CI/CD 툴 선택 기준1) Github와 연동되는가2) Slack을 통해 팀에게 알릴 수 있는 Webhook 기능을 제공하는가3) Test를 진행할 수 있는 환경인가4) 소요되는 비용 2. iOS CI/CD Tools 특징보통 Xcode cloud, Github Actions, Fastlane, Bitrise를 사용하는 것으로 보인다.여기서 어떤 툴을 사용해야할지 선택해야하니 .. 다른 분들의 적용기들을 참고해서 대략적인 특징을 정리해보았다. 1) Github Actions현재 회사 개발팀에서 활용하고 있는 배포 자동화 툴이다. 장점- Github 자동화툴인만큼, Github와 호환성이 좋으며 내부에서 심플하게 자동화 workflow 구축 가능하다는 점이 장점- Github에서 다양한 Te..

[iOS/Swift] MVVM-C + Clean Architecture 리팩토링

MVVM-C(Coordinator)로 되어있는 프로젝트를 진행하던 중, ViewModel이 API 통신 + 비즈니스 로직 등 모든 로직을 처리하면서 한 클래스가 너무 많은 역할을 가져가고 있다는 생각이 들었고, 이에 따라 유지보수에 많은 시간이 소요된다고 생각했다. --> 객체지향 SOLID의 S(RP, 단일 책임 원칙)에 거리가 멀어 응집도가 낮고 결합도가 높음 --> 유지보수에 많은 시간 소요 + 단위 테스트의 어려움 이미 MVVM-C인 패턴에서 ViewModel의 데이터 로직 - 비즈니스 로직을 분리해줄 아키텍처가 있을까 해서 VIPER나 RIBs 등 여러가지 아키텍처에 대해 조사해본 결과, 현재 아키텍처에서 Clean Architecture의 원리를 도입하는 것이 가장 의도와 적절한 아키텍처라는 ..

[iOS/GCD] 4. async/await (Swift 5.5 ~) (feat. vs Combine, RxSwift)

async/await이 나오게 된 배경 메인 스레드에서 다른 스레드로 작업을 보내고 -> 해당 스레드에서 다른 스레드로 작업을 보내고 .... 이런식으로 이어나가면서 completionHandler를 진행하게 되면, 콜백 지옥에 빠지게된다. func processImageData(completionHandler: (_ result: Image) -> Void) { loadWebResource("a.txt") { dataResource in loadWebresource("b.txt") { dataResource in decodeImage(dataResource, imageResource) { imageTmp ..... async/await를 도입하면? func processImageData() async ..

🍎 iOS/GCD 2023.07.24

[iOS/GCD] 3. GCD의 주의사항

주의해야 하는 사항 1. UI 관련한 작업은 반드시 메인 스레드로 보내줘야한다. (DispatchQueue.main.async) DispatchQueue.global().async { // 네트워크 통신 (데이터 다운로드) DispatchQueue.main.async { // UI와 관련된 작업 } } 2. 비동기 처리를 하는 함수에서는 return 문으로 반환하면 비동기적 실행으로 인해 nil을 return하므로, 탈출 클로저를 사용하여 결과값을 반환해야한다. (Apple에서는 이를 completion Handler라고 명칭함) func getImages(url: String, completionHandler: @escaping (UIImage?) -> Void) { let url = URL(strin..

🍎 iOS/GCD 2023.07.23

[iOS/Swift] URLSession vs Alamofire

iOS 앱을 만들 때 거의 필수적으로 네트워킹을 구현하는 경우가 많다. URLSession, Alamofire 모두 사용해보았을 때 각각 원리가 어떻게 되고, 장단점이 어떻게 되는지 분석하여 현재 프로젝트 리팩토링이나 다음 프로젝트를 진행할 때 기술 선택 시 도움이 되고자 비교해보고자 한다. URLSession vs Alamofire URLSession은 애플 프레임워크에서 제공되는 가장 기본적인 방법이며, Alamofire/Moya는 서드파티 라이브러리이다. Get과 Post 각 메소드에 대해 라이브러리 별 사용을 비교할 것임. (어차피 delete, put, patch는 모두 Post와 같이 body값을 보내주는 형태이기 때문에 생략) 먼저 URLSession, Alamofire를 비교해보자. 1) ..

[iOS/UIKit] UITableView, UICollectionView 다시 살펴보기

안녕하세요, 오늘은 항상 프로젝트에서 써왔지만 !!제대로!! 원리와 몰랐던 개념을 다시 정리해보고자 UITableView와 UICollectionView를 뜯어보고자 합니다. 1. UITableView https://developer.apple.com/documentation/uikit/uitableview UITableView | Apple Developer Documentation A view that presents data using rows in a single column. developer.apple.com - 하나의 컬럼을 사용하여 여러가지 행 데이터들을 보여주는 뷰이다. -> 세로 스크롤만 가능하다는 점을 알 수 있음 - 새삼스럽게 다시 알게된 사실이지만 UITableView는 UIScr..

반응형