iOS (131) 썸네일형 리스트형 [Combine] Combine (1) - Combine이란? 우리가 컴바인을 알아보기 전에 함수형 반응형 프로그래밍에 대하여 알아보자 반응형 프로그래밍이란?반응형 프로그래밍의 기본 개념은 모든 것이 이벤트이며, 이러한 이벤트는 비동기적으로 발생한다. 이벤트는 이벤트 소스에 의해 전송되며, 관심 있는 루틴에 특정 이벤트를 수신하도록 등록할 수 있다. 대부분의 경우 이러한 이벤트 스트림은 각 subscriber에게 더 유용하게 변환(transformed)한다. CombineCombine은 시간에 따라 값들을 처리하기 위한 선언형 문법 API이다. 아래는 주요 3가지 핵심 개념이다. Publisher값을 시간에 따라 전달하는 객체. completion하거나 error로 종료될 수 있다.ex) URLSession.DataTaskPublisher, Just, Notific.. [Swift] ARC(Automatic Reference Counting) Automatic Reference CountingSwift는 메모리 관리를 위해 Automatic Reference Counting(ARC)라는 시스템을 사용한다. 대부분의 경우, ARC는 Background에서 자동으로 작동하기 때문에 개발자는 직접 메모리 관리에 신경 쓸 필요가 없다. 하지만 ARC가 어떻게 작동하는지 이해하면, 앱의 메모리 사용을 최적화하거나, 참조 순환(reference cycle) 같은 문제를 피하는 데 도움이 된다. 메모리 관리란?컴퓨터의 메모리는 프로그램이 실행되는 동안 데이터를 저장하기 위해 사용된다. Swift에서는 대부분의 값이 struct, enum, class로 정의된다. 이 중에서 struct와 enum은 값 타입(value types) 이므로, 새로운 인스턴스를.. [TDD] TDD와 Unit Test, Test Double TDD개발자라면 한번쯤은 들어봤어 법한 TDD는 'Test Driven Development'의 약자로, 번역하면 테스트 주도 개발이라는 뜻이다.이는 반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위의 테스트 케이스를 작성하고, 이를 통과할 수 있는 코드를 추가하는 단계를 반복하여 구현하는 방법이다. TDD에는 3단계 사이클이 존재한다.Red: 실패하는 테스트를 먼저 작성한다.Green: 테스트를 통과시키는 최소한의 구현Refactor: 중복 제거/설계 개선 리펙토링 (테스트는 계속 초록)이 리듬을 짧게 반복하며 기능을 확장한다. iOS에서는 테스트를 하기 위해 XCTest를 사용한다. 자세한 내용은 아래 공식문서를 참고한다. XCTest | Apple Developer DocumentationCr.. [UIKit] TableView에서 URL 이미지 캐싱 및 로딩 최적화 - ImageLoader + ImageCache 구현하기 UITableView나 UICollectionView에서 cell에 이미지를 넣을 때 url로 다운로드하여 이미지를 적용하면 잘못된 셀에 이미지가 추가되거나 앱이 백그라운드로 갔다오면 이미지를 전부 재로딩을 해야하는 문제가 생긴다. 이런 문제들을 방지하기 위해 캐싱과 다운로드 관리가 필요하다. 캐싱과 NSCache구현하기 전에 간단하게 캐싱과 NSCache에 대하여 알아보자. 캐싱(Caching)한 번 가져온 데이터를 재사용하기 위해 임시로 저장해두는 것네트워크 호출이나 디스크 IO처럼 비싼 연산을 줄이고, 속도를 높이는 핵심 기법예:- 웹 브라우저가 이미 본 이미지를 다시 다운로드 하지 않도록 저장- API 호출 결과를 메모리에 저장해 빠르게 재표시iOS에서 자주 쓰는 캐싱 방식메모리 캐시- 앱 프로세.. TCA(The Composable Architecture) 다양한 아키텍처에 대하여 공부하는 중 Combine과 함께 작동하는 TCA에 대하여 포스팅해보려고 한다.내용은 아래 공식 깃헙 링크를 참고하였다. GitHub - pointfreeco/swift-composable-architecture: A library for building applications in a consistent and understandable way,A library for building applications in a consistent and understandable way, with composition, testing, and ergonomics in mind. - pointfreeco/swift-composable-architecturegithub.comTCA(The .. [Fastlane] framework 빌드 자동화 구현하기 현재 회사에서 진행 중인 CoreML을 사용하여 framework를 만들어 모듈화 하는 작업을 진행하는 중이다.실제 framework를 생성하고 나서 빌드하여 데모 프로젝트나 실제 프로젝트에 적용하기 위해서는 빌드 폴더에 들어가서 일일이 작업해줘야 하는 번거로움이 있다. 그 번거로움을 덜기 위해 배포 자동화 도구인 'Fastlane'을 사용하였다. fastlane 설치 방법은 아래 공식 문서를 참고한다. Setup - fastlane docsGetting started with fastlane for iOS Setup Xcode for fastlane xcode-select --install Installing fastlane fastlane can be installed in multiple ways... [Swift Concurrency] Actor / MainActor Main ActorActor는 가변 상테에 대한 접근을 순차화하여 안전하게 공유하도록 한다. UI 관련 데이터는 MainActor가 보호하며, UI 랜더링, 이벤트 처리, UI 업데이트 코드는 MainActor 위에서 실행된다. @MainActor 속성(attribute)을 사용하여 함수, 메서드, 클로저, 타입을 MainActor에서 격리할 수 있다. @MainActorfunc show(_: Data) { // ... UI 코드 ...}func downloadAndShowPhoto(named name: String) async { let photo = await downloadPhoto(named: name) await show(photo)}MainActor에서 벗어난 코드가 MainA.. [Swift Concurrency] Task Task와 Task Group Task는 비동기 작업 단위이며, 모든 비동기(async) 코드는 Task의 일부로 실행된다. 여러 Task를 생성하면 Swift가 동시에 실행할 수 있도록 스케줄링한다. async let은 암묵적 child Ttask를 만들지만, 명시적 Task 그룹(TaskGroup)을 사용하면 우선순위, 취소(cancellation), 동적 Task 생성 등을 더 세밀히 제어할 수 있다. 구조화된 동시성(structured concurrency)을 통해 Task 간 부모-자식 관계를 관리하며 다음과 같은 장점이 있다.부모 Task는 자식 Task가 완료될 때까지 기다린다.자식 Task의 우선순위가 높아지면 부모 Task 우선순위도 자동으로 조정된다.부모 Task가 취소되면 모든 자식.. 이전 1 2 3 4 ··· 17 다음