3. AsyncStream — Push 방식 (Continuation 기반)
·
카테고리 없음
AsyncStream은 그 보일러플레이트를 클로저 하나로 줄여주는 도구입니다.3.1 왜 AsyncStream인가2단원 마지막에 만들었던 Counter를 다시 떠올려 보면.struct CounterIterator: AsyncIteratorProtocol { /* ... */ }struct Counter: AsyncSequence { typealias Element = Int typealias AsyncIterator = CounterIterator func makeAsyncIterator() -> CounterIterator { /* ... */ }}겨우 1~10까지 세는 시퀀스 하나 만들겠다고 타입 두 개 만들고, 연관 타입 선언하고, next() 구현하고… 쓰껄. 그래서 Apple이 "..
2. AsyncSequence 프로토콜
·
카테고리 없음
2.1 왜 비동기 시퀀스가 필요할가원래 비동기 코드// ㄹㅈㄷ 콜백지옥발생manager.fetchFirst { first in manager.fetchSecond(after: first) { second in manager.fetchThird(after: second) { third in // ... } }}// 델리게이트 패턴 — 여러 메서드가 흩어짐extension MyClass: SomeDelegate { func didReceiveData(_ data: Data) { /* ... */ } func didFail(with error: Error) { /* ... */ } func didComplete() { /* ... */ }..
Sequence 프로토콜
·
IOS - Swift
1.1 Sequence ProtocolSequence는 "한 번에 하나씩 값을 꺼낼 수 있는 능력"을 추상화한 프로토콜입니다.Array, Set, Dictionary, Range, String 같은 타입들은 모두 이 프로토콜을 채택하고 있어서 for-in 반복문에 들어갈 수 있습니다.for item in [1, 2, 3] { } // Array도for c in "Hello" { } // String도for n in 1...10 { } // Range도for (k, v) in ["a": 1, "b": 2] { } // Dictionary도반대로 말하면, Sequence를 채택하지 않은 타입은 for-in에 그대로 넣을 수 없습니다.?..
[iOS] CleanArchitecture를 도입해보자 - 4편 (모듈로 구분하기)
·
카테고리 없음
이전 1 2 3 편에 걸쳐 레이어별 책임과 경계를 정하는 과정을 이야기했다면, 이제는 실제로 이것들을 어떻게 물리적 모듈로 분리할 것인가에 대한 고민이 시작되었습니다. 프로젝트를 처음 설계 할때 클린 아키텍처를 통해 레이어의 완전한 분리를 목표로 삼았고, 클린 아키텍처의 레이어를 기반으로 물리적 모듈을 나누고자 Tuist를 사용하여 모듈을 분리했습니다. 처음 나눈 구조는 이와같습니다.NoWeekend/├── App/ # 🎯 최상위 앱 레이어├── Features/ # ✨ 각 기능별 모듈들│ ├── Calendar/│ ├── Home/│ └── Profile/│ ├── Common/ ..
[iOS] CleanArchitecture를 도입해보자 - 3편 (트러블슈팅)
·
카테고리 없음
1편과 2편에서 클린 아키텍처의 이론적 배경과 구현 과정에 대해 이야기했다면 3편에서는 제가 어떻게 구현했는지, 어떤 고민들을 했었는지에 대한 트러블 슈팅 정리본입니다.폴더 구조는 어떻게 설계할 것인가?Entity와 Repository는 각각 어느 위치에 배치해야 할까?각 레이어의 경계를 어디까지 설정하는 것이 적절할까?등과같은 고민들, 그리고 클린아키텍처 기반으로 물리적 모듈설정을 Tuist로 세팅하였는데 관련된 트러블 슈팅까지 정리하는 정리본입니다. 전체코드는https://github.com/mash-up-kr/NoWeekend-iOS GitHub - mash-up-kr/NoWeekend-iOS: 금토일빼고 다돼! (🚧🚧 WIP 🚧🚧)금토일빼고 다돼! (🚧🚧 WIP 🚧🚧). Contri..
[iOS] CleanArchitecture를 도입해보자 - 2편 (구현)
·
카테고리 없음
클린 아키텍처 레이어 구조1편에서 기본적으로 클린 아키텍처가 왜 필요했는지 말했다면, 이제 실제 프로젝트에서 어떻게 구현해야 하는지 알아보겠습니다.저도 처음에는 동심원 구조는 이해를 했는데 그래서 실제 코드로 어떻게 옮겨야 하지? 라는 고민이 제일 컸었습니다. 해당 고민을 천천히 나눠볼게요.클린 아키텍처를 iOS 프로젝트에 적용할 때는 보통 4개의 레이어로 구성합니다┌─────────────────────────────────────────────┐│ Presentation Layer │ ← SwiftUI Views, ViewModels├─────────────────────────────────────────────┤│ Domain..
[iOS] Clean Architecture를 도입해보자 - 1편 (이론)
·
카테고리 없음
iOS 개발을 시작하면서 "MVVM이 좋다더라", "클린 아키텍처를 써야 한다더라" 하는 이야기들을 자주 들었고 다양한 블로그나 깃허브 레포에 적혀져 있는 글들을 많이 보았었습니다. 사실 이전까지는 클린아키텍쳐를 써야하는 당위성에 대해서 잘 몰랏기도 했고 없어도 크게 불편한부분이 없었습니다. 특히나 클린아키텍쳐를 사용하여 구현한 코드들을 보더라도"깔끔하긴 한데, 그래서 이게 뭐?”라는 의문이 들었었습니다.하지만 이번에 동아리에서 프로젝트를 하면서 좀더 깊게 공부를 해보았고 공부했던 내용들을 적어보고자 합니다.내가 참고한 레포구현을 위한 구현개발을 하다보면 일정이 부족해져서 "일단 돌아가게만 만들자"라는 생각으로 코드를 작성하게 되는 경우가 꽤나 많습니다 (이번 동아리 프로젝트도 그랬던)처음에는 빠르게 원..
[iOS/SwiftUI] SwiftUI에서 Coordinator 사용기
·
카테고리 없음
이전 블로그에 이어서 쓸래말래 프로젝트에 사용된 Coordinator 사용기를 남겨보고자 한다. 전체코드는 여기에! Coordinator 패턴이란?Coordinator 패턴은 네비게이션 로직을 View와 분리하여 관리하는 패턴입니다.UIKit에서는 UINavigationController를 통해 네비게이션을 처리했고navigationController?.pushViewController(detailVC, animated: true)navigationController?.present(modalVC, animated: true)`SwiftUI에서는 NavigationStack과 바인딩을 활용해서 네비게이션을 처리했었습니다.NavigationStack(path: $path) { ContentView()..
[iOS/SwiftUI] SwiftUI에서 DI를 해보자 (with Swinject)
·
카테고리 없음
최근 프로젝트에서 사용했던 DI 방법을 트러블 슈팅겸 적어보고자 한다.전체코드는https://github.com/mash-up-kr/NoWeekend-iOS GitHub - mash-up-kr/NoWeekend-iOS: 금토일빼고 다돼! (🚧🚧 WIP 🚧🚧)금토일빼고 다돼! (🚧🚧 WIP 🚧🚧). Contribute to mash-up-kr/NoWeekend-iOS development by creating an account on GitHub.github.com에서 확인할 수 있다. 1. DI?의존성 주입(Dependency Injection, DI)은 객체지향 프로그래밍에서 객체 간의 의존성을 효율적으로 관리하는 설계 패턴입니다.의존성이란 무엇인가?의존성(Dependency)은 한 객체..