| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- Combine vs Async/Await
- ScrollViewReader
- Concurrency Programming
- swift
- TCA
- MVVM
- SwiftUI
- ios
- combine
- Custom URL Scheme
- await
- @NameSpace
- .task
- Static Dispatch
- taskgroup
- ScrollViewProxy
- The Composable Architecture
- matchedGeometryEffect
- @main
- App Thinning
- @ObservedObject
- SwiftData
- AnyCancellable
- async/await
- wwdc23
- async
- architecture
- Dynamic Dispatch
- Swift Concurrency
- Universal Link
- Today
- Total
목록iOS (29)
홍로그
Swift Concurrency에서 가장 많이 쓰는 도구가 Task, SwiftUI의 .task, 그리고 TaskGroup입니다. 이름이 비슷해서 “결국 다 비동기 돌리는 거 아냐?”로 뭉개지기 쉬운데, 실제로는 생명주기(누가 관리하냐)와 구조적 동시성(Structured Concurrency) 관점에서 역할이 확실히 갈립니다. Swift의 기본 철학은 구조적 동시성입니다. 즉, 비동기 작업이 “아무 데서나 떠다니는” 게 아니라 부모-자식 관계를 갖고, 보통은 스코프를 벗어나 살아남지 않게 관리하는 방식이 기본값입니다. Task란?Task는 말 그대로 비동기 작업의 단위(unit of asynchronous work)입니다. async 컨텍스트(이미 비동기 흐름 안)에서든, 동기 코드에서든 “이 일을 비..
iOS에서 동시성(Concurrency)을 다루다 보면 “이 코드는 스레드 세이프한가?”라는 질문을 피하기 어렵습니다.기존에는 DispatchQueue, NSLock 같은 도구로 개발자가 직접 안전장치를 만들었다면, Swift Concurrency는 언어 차원에서 동시성 안전을 제공합니다.그 중심에 있는 개념이 Actor입니다.이 글에서는 다음 내용을 순서대로 설명합니다.Actor란 무엇인가Actor와 Class의 본질적인 차이Data 계층에서 final class Repository를 actor로 바꾸었을 때의 실제 영향동시성에서 진짜 자주 터지는 문제부터 시작해 보겠습니다동시성 문제가 어려운 이유는 한 가지입니다.코드는 “순서대로” 읽히는데실행은 “동시에” 일어날 수 있기 때문입니다예를 들어 이런 코..
Equatable이란 무엇인가1. Equatable의 기본 개념Swift에서 Equatable은 두 값이 같은 값인지 비교할 수 있도록 해주는 프로토콜입니다.public protocol Equatable { static func == (lhs: Self, rhs: Self) -> Bool}여기서 중요한 점은, 이 비교가 단순히 메모리 주소를 비교하는 것이 아니라“이 두 값을 같은 값으로 볼 수 있는가”를 타입이 직접 정의한다는 점입니다.Swift에서 자주 언급되는 두 개념을 비교하면 다음과 같습니다.class는 보통 참조 기준(identity)이 중요합니다.struct는 보통 값 기준(equality)이 중요합니다.Equatable은 이 중에서도 값 기준 비교를 명확하게 하기 위한 도구입니다.즉, Eq..
📖fileprivate과 private의 차이 fileprivate과 private은 Swift에서 접근 제어자 중 하나입니다. 접근 제어자는 class, struct, enum, protocol 등의 범위와 기능에 따라 코드의 접근을 제한할 수 있도록 도와줍니다. open / public: 전체 프로젝트 어디에서든 접근이 가능한 가장 높은 접근 수준 internal: 해당 모듈 내에서만 접근이 가능하며, 기본 접근 수준 fileprivate: 현재 정의된 파일 내에서만 접근이 가능한 접근 수준 private: 현재 정의된 class, struct, enum 등의 scope 내에서만 접근이 가능한 가장 낮은 접근 수준 fileprivate 파일 내 어디에서든 접근이 가능한 접근 제한자입니다. 같은 파일 ..
📖TCA란? iOS의 TCA(The Composable Architecture)는 SwiftUI 및 Combine을 사용하여 앱 아키텍처를 구축하는 프레임워크입니다. TCA는 앱의 로직을 크게 단순화하고 테스트 가능한 컴포넌트로 구성하여 코드 재사용과 확장성을 증가시키는 것에 초점을 맞추고 있습니다. TCA는 복잡하고 다양한 목적을 가진 앱을 구축하는 데 사용할 수 있고 앱 개발에 있어서 매일 마주하는 많은 문제들을 해결하기 위한 구체적인 방법들을 제공합니다. State management 단순한 값 유형을 사용하여 앱의 상태를 관리하고 여러 화면 간에 상태를 공유하여 한 화면에서 발생한 변화가 다른 화면에서 즉시 관찰될 수 있도록 하는 방법입니다. Composition 큰 기능을 작은 구성 요소로 분해..
📖Concurrency Programming이란? Concurrency Programming은 여러 개의 작업을 동시에 실행하거나 처리하는 방법을 말합니다. iOS에서는 이를 효과적으로 관리하기 위해 다양한 concurrency models, tools, 그리고 기술이 제공되고 있습니다. Concurrency Programming은 앱의 성능을 향상시키고 사용자 경험을 개선하는 데 도움을 줍니다. GCD(Grand Central Dispatch) GCD는 앱 내에서 작업을 큐에 추가하고, 시스템이 이를 관리하여 필요한 스레드에서 실행하도록 합니다. GCD는 다양한 큐(메인 큐, 백그라운드 큐 등)와 디스패치 그룹을 제공하여 작업을 관리하고 우선순위를 설정할 수 있습니다. 비동기적인 작업을 처리하거나 동시..
📖DeepLink란? 딥링크(Deep Link)는 모바일 앱에서 특정 화면이나 기능으로 사용자를 바로 연결하게 해주는 링크 기술입니다. iOS에서 딥링크는 Universal Links와 Custom URL Scheme이라는 방식으로 구현됩니다. Universal Links Universal Links는 iOS 9 이상에서 사용하는, 앱과 웹 사이트 간의 연결을 간소화한 딥링크 방식입니다. Universal Links는 웹사이트와 앱의 특정 화면을 연결하고, 앱이 설치되어 있다면 사이트의 URL을 클릭하면 바로 해당 앱의 특정 화면으로 이동합니다. 앱이 없다면 기본 웹 페이지로 연결합니다. 이 기능을 활성화하려면, 앱 개발자는 웹서버에 apple-app-site-association 파일을 업로드하고, 앱..
📖 AnyCancellable이란? Combine 프레임워크는 데이터 스트림을 비동기적으로 처리할 수 있는 도구입니다. 이 프레임워크는 Publisher, Subscriber, Operator, Cancellable 등의 주요 요소로 구성되어 있습니다. Combine에서 비동기 작업을 수행할 때는 주로 Publisher에서 생성한 이벤트를 Subscriber로 전달해 처리하게 됩니다. 이 과정에서, AnyCancellable은 매우 중요한 역할을 합니다. 그 이유는 구독 작업이 끝난 경우에 리소스를 해제하고 구독(subscription)을 취소하는 역할을 하기 때문입니다. 객체가 생성되어 구독 과정이 시작되면, 실제로 구독 작업을 하는 동안 리소스가 사용됩니다. 이때 발생할 수 있는 문제점은 구독이 완료..
📖SwiftData란? SwiftData는 Swift 언어를 기반으로 한 강력한 데이터 모델링 및 관리 프레임워크입니다. 이 프레임워크는 현대적인 Swift 앱을 개발하는 데 사용되며, SwiftUI와 완벽하게 통합되어 앱의 데이터 모델을 효과적으로 관리할 수 있습니다. 또한 CloudKit와 같은 다른 플랫폼 기능과도 원활하게 작동합니다. SwiftData는 외부 파일 형식 없이 코드에만 집중하며, Swift의 새로운 매크로 시스템을 활용하여 매끄러운 API 경험을 제공합니다. SwiftData는 데이터 모델을 정의하기 위해 새로운 @Model 매크로를 도입하였습니다. SwiftData의 스키마는 일반적인 Swift 코드로 작성되지만, 필요한 경우 속성에 추가 메타데이터를 주석으로 추가할 수 있습니다...
📖 @NameSpace란? @Namespace는 SwiftUI에서 애니메이션에 사용되는 고유 식별자(ID)를 관리하는 역할을 합니다. 이 식별자는 여러 뷰와 함께 사용되며, 일반적으로 부드럽고 동기화된 애니메이션 효과를 만들기 위한 matchedGeometryEffect 수식어와 함께 사용됩니다. matchedGeometryEffect는 두 뷰 사이의 특정 요소를 동일하게 유지하거나 부드럽게 전환되게 하는 방법을 제공합니다. 이 수식어는 많은 애니메이션 시나리오에서 사용되며, 더욱 쉽게 구현할 수 있습니다. 예시코드 import SwiftUI struct ContentView: View { @Namespace private var animation @State private var isExpanded =..