Swift
-
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..
-
Swift Package 란Swift 2023. 1. 17. 15:45
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. 번들 소스파일, 바이너리, 리소스 등을 앱에서 사용하기 쉽게 번들로 제공합니다. Xcode 12부터 (swift-tool-version: 5.3 이상) Swift Package Manager 를 사용해 Swift Package 를 만들고 배포하고 추가, 제거 뿐 아니라 의존성 관리도 할 수 있습니다. 참고 https://developer.apple.com/documentation/xcode/swift-packages Apple Developer Documentation developer.apple.com Swift Package M..
-
[PackageDescription] 재사용 가능한 코드를 쉽고 편리하게 관리하자Swift 2023. 1. 17. 15:38
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. Swift Package 는 메인 디렉토리에 Package.swift 파일이 필수로 필요합니다. 이 파일 안에서 package manifest 의 PackageDescription 라이브러리를 사용해 의존성, 리소스, 여러 옵션을 관리할 수 있습니다. 예로 SlothCreator: Building DocC Documentation in Xcode 프로젝트의 package.swift 파일은 다음과 같이 생겼습니다. 안에 "SlotCreator" 라이브러리를 갖고 있는 패키지를 정의했고 타켓 정보들도 명시할 수 있습니다. import ..