본문 바로가기

전체 글

(97)
[SwiftUI/TCA] CMPedometer, AsyncThrowingStream, TCA dependencies 라이브러리로 만보기 기능 구현하기 현재 진행중인 프로젝트에서 실시간으로 걸음수를 업데이트하는 기능을 구현해야 했습니다. 프로젝트 스펙은 tuist 모듈화 및 TCA 아키텍쳐를 사용하고 있었기 때문에, TCA에 내장된 dependencies 라이브러리로 의존성을 관리하고자 했습니다. 걸음 수 데이터 가져오기 걸음 수 데이터는 HealthKit 또는 CoreMotion의 CMPedometer를 이용하여 가져올 수 있습니다. HealthKit을 이용하기 위해서는 사용자의 건강 정보에 접근 권한을 가지고 있어야하며, CoreMotion의 경우 Motion 정보 접근 권한을 허가받아야 합니다. CMPedometer를 이용할 경우 HealthKit보다 더욱 빠르게 sync되는 걸음수 데이터를 얻을 수 있기 때문에, 실시간 만보기를 구현해야 하는 입..
[SwiftUI] Managing Data by Property Wrappers (@State, @StateObject, @ObservedObject, @EnvironmentObject) SwiftUI가 기존 UIKit과 비교하여 크게 다른 점 중 하나는, State를 관리할 수 있는 Property Wrappers가 기본적으로 제공된다는 것입니다. 가장 기본적인 @State부터 시작하여, @StateObject, @ObservedObject, @EnvrionmentObject까지 언뜻 비슷하지만 확연히 다른 성질을 가지고 있습니다. 특성과 용도에 대해 헷갈릴 수 있는 부분이 있어 위의 4가지 프로퍼티 래퍼에 대해 간단히 요약해보려고 합니다. 먼저 @State에 대해 알아보겠습니다. @State A property wrapper type that can read and write a value managed by SwiftUI. @frozen @propertyWrapper struct S..
[Needle] Uber의 Needle로 컴파일 타임에 안전한 의존성 주입 환경을 구현하기 의존성 주입(dependency injection)의 필요성과 일반적인 문제점 DI, 의존성 주입은 객체 지향 프로그래밍에서 책임을 분리하고, 확장에 유연하게 만들어주는 핵심적인 패턴 중의 하나입니다. 의존성 주입의 장점은 다음과 같습니다. 1. Class와 Structure의 요구사항과 책임이 더욱 분명하고 명확해진다. 2. 의존성을 Mock으로 교체하여 Unit Test를 수행하기 편리해진다. 3. 의존성 주입을 받는 객체는 해당 의존성에 대한 책임을 지지 않으면서도 그 의존성의 기능을 사용할 수 있다. 4. Protocol을 사용하면 프로젝트에 존재하는 Coupling을 제거할 수 있다. 5. 여러 개발자가 분리된 객체에 대한 동시 작업이 가능해진다. 물론 장점만 있는 것은 아닙니다. 프로그래머의 ..