Swift
-
[Swift6] @retroactive 를 써야 할까? Extension declares a conformance of imported type ~ 에 대하여Swift 2025. 4. 18. 10:04
Swift6로 올라오면서 extension 해주는 부분에서 아래와 같은 워닝이 발생합니다.Extension declares a conformance of imported type '~A~' to imported protocol '~B~'; this will not behave correctly if the owners of 'Entity' introduce this conformance in the future 이 워닝엔 보통 Fix가 달려있어 자동으로 @retroactive 를 추가해주면 워닝은 해결됩니다.하지만 @unchecked Sendable 같이 뭔가 좀 거부감이 들어 자세히 알아보려고 합니다.Add '@retroactive' to silence this warning @retroactiveSw..
-
RxSwift Single Swift6 대응하기Swift 2025. 4. 11. 18:00
기존에 RxSwift 특히 Single을 사용하던 부분에서 Swift6 대응하며 삽질했던 겪었던 어려움을 남겨봅니다. # 배경먼저 기존 저희 코드에서 Network 통신을 처리하는 부분은 업데이트를 거듭하며completionHandelr, async, rx 3가지 버전이 있었습니다.completion 방식이 제일 기본이고 이를 래핑해서 아래 버전들로 만들어 둔 상태였습니다.- async (swift concurrency)- single (rx) 대강 아래와 같은 형태입니다.// completion handler 방식func get(url: String, completion: @escaping: (response: T?) -> Void {}// Rxfunc get(url: String) -> Single ..
-
Swift Seqeunce 이해하기Swift 2025. 3. 27. 14:16
Swift의 Sequence 는 배열의 가장 기본이 되는 프로토콜입니다. 너무 당연하게 사용하고 있지만 정확히 어떤 개념인지 알아보겠습니다.Seqeunce는 Element 에 하나씩 접근할 수 있는 기능을 제공. - makeIterator() 를 제공하거나 IteratorProtocol을 채택하고 next()를 제공해야 함.- for-in, contains 사용 가능- O(n)의 시간복잡도 # 기본 개념protocol SequenceSequence 는 순차적인 일련의 들을 하나씩 반복해서 접근할 수 있는 유형을 뜻합니다.Sequence 프로토콜을 따른다면 for-in 을 사용할 수 있습니다.for-in은 Element에 하나씩 접근하는 가장 기본적인 동작이니 아주 자연스럽습니다.struct Countdo..
-
[Swift] TaskPriority, Task 우선순위 동작 이해하기Swift 2025. 3. 21. 10:40
TaskPriority 는 말 그대로 Task의 우선순위를 뜻합니다. 직관적이고 간단한 개념이지만 Task의 우선순위와 관련한 개념에 대해 조금 더 확실하게 알아보겠습니다. # 기본 개념TaskPriority는 스케줄링 힌트일 뿐, 반드시 이 우선순위에 따라서 실행된다는 보장은 없습니다.@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)public struct TaskPriority : RawRepresentable, Sendable 케이스case high // 사용자 인터페이스 등 즉시 반응이 필요한 작업case userInitiated // 사용자가 명시적으로 시작한 작업, 빠르게 끝나야 함case medium // 일반적인 ..
-
[Swift] Sendable 이해하기Swift 2025. 2. 11. 20:29
Sendable은 data races의 위험 없는 thread-safe 한 타입임을 보장하는 protocol 입니다.Sendable을 따른다는 건, 동시성 걱정 없이 전달할 수 있다는 걸 의미합니다.따라서 actor의 메서드 파라미터로도 전달할 수 있습니다.Swift6 부터는 컴파일 단계에서 동시성이 필요한 경우 Sendable을 체크해서 검증한다고 합니다.예를 들어, Task를 만들 때 공유 데이터가 Sendable을 준수하지 않으면 컴파일 에러를 발생시킵니다. 아래 4가지는 안전하게 파라미터로 전달할 수 있습니다. 즉, Sendable 합니다.1. 값 타입 (Value types)struct나 enum은 내부 변수까지 모두 Sendable을 준수하는 값들로만 구성되어 있다면 Sendable 을 채택할..
-
[Swift] Actor 이해하기Swift 2025. 2. 11. 18:35
Actor란 Data race 문제를 방지하기 위해 도입된 Reference Type 입니다.내부 상태를 보호해서 data race를 방지하고,내부적으로 직렬 실행을 보장해서 동시에 여러 작업이 실행되지 않도록 합니다.class와 마찬가지로 참조 타입이지만 상속은 지원하지 않습니다. Actor가 유용한 대표적인 예시를 하나 살펴보겠습니다.바로 은행 시스템입니다. 은행 계좌에서 안정성이 왜 중요한지는 굳이 설명하지 않아도 되겠죠 ?actor BankAccount { let accountNumber: Int var balance: Double init(accountNumber: Int, initialDeposit: Double) { self.accountNumber = accou..
-
[RxSwift] RxRelay 그리고 CombineSwift 2024. 6. 25. 13:02
BehaviorSubject를 래핑하는 클래스다.BehaviorRelay는 BehaviorSubject와 마찬가지로 상태값을 갖고 있지만,종료(terminate) 되지 않는다. error도 없고 completed도 없다./// BehaviorRelay is a wrapper for `BehaviorSubject`.////// Unlike `BehaviorSubject` it can't terminate with error or completed.public final class BehaviorRelay: ObservableType { private let subject: BehaviorSubject BehaviorSubject 는 Observable을 상속받아 별다른 처리 없이 바로 사용이 가능하지만Be..
-
Identifiable 프로토콜 기본개념Swift 2023. 7. 31. 14:32
protocol Identifiable > ID: Hasable 안정적인 id 값을 갖는 인스턴스 객체 특정 기간이나 범위 안에서 유니크함을 보장함. 아래 특성들을 가질 수 있음. - 항상 유니크함. 예를 들어, UUID - 특정 환경안에서 유니크함. 예를 들어, 데이터베이스 record 키들 - 프로세스 생애주기 동안 유니크함. 예를 들어, static 변수 - 객체의 생애주기 동안 유니크함. 예를 들어, object identifiers - 현재 집합 안에서 유니크함. 예를 들어, collection indices Identifiable Protocol 을 채택하면 class 타입은 ObjectIdentifier 를 기본 값으로 제공해줌. 하지만 이는 객체의 생애주기 동안만 유효. 더 강력한 ide..