전체 글
-
Swift 동시성 모델Apple🍎/Swift 2025. 4. 18. 20:14
실행 컨텍스트 (Execution Context)실행 컨텍스트는 코드가 실행되는 독립적인 환경을 의미합니다. Swift의 동시성 모델에서 각 컨텍스트는 자체적인 격리 특성을 가지고 있으며, 이를 통해 안전한 동시성을 구현합니다.주요 실행 컨텍스트 유형메인 액터 컨텍스트 (Main Actor Context)UI 작업을 위한 특별한 컨텍스트항상 메인 스레드에서 실행됨@MainActor 속성이나 MainActor.run { } 블록 내부 코드가 이 컨텍스트에서 실행됨액터 컨텍스트 (Actor Context)각 액터 인스턴스마다 고유한 컨텍스트 존재액터 내부의 메서드와 프로퍼티에 접근할 때 활성화됨자체 직렬 큐를 통해 상태 접근을 동기화하여 데이터 레이스 방지분리된 태스크 컨텍스트 (Detached Task C..
-
DispatchQueue와 DispatchWorkItem 비교하기Apple🍎/Swift 2025. 4. 17. 18:50
DispatchQueue란?DispatchQueue는 작업들을 FIFO(First-In-First-Out) 순서로 관리하고 실행하는 객체입니다. 주로 비동기 작업을 관리하고 백그라운드 스레드에서 코드를 실행할 때 사용합니다.// 글로벌 큐를 사용한 비동기 작업DispatchQueue.global().async { // 백그라운드에서 실행할 코드 print("백그라운드 작업 실행 중...")}// 메인 큐를 사용한 UI 업데이트DispatchQueue.main.async { // UI 업데이트 코드 print("메인 스레드에서 UI 업데이트 중...")}DispatchWorkItem이란?DispatchWorkItem은 실행 가능한 코드 블록을 캡슐화한 객체입니다. 작업을 객체화함으로써..
-
Swift에서의 데이터 레이스 방지를 위한 동기화 기법Apple🍎/Swift 2025. 4. 16. 23:09
1. NSLock (Foundation 프레임워크)NSLock은 Swift에서 사용할 수 있는 가장 기본적인 락 메커니즘입니다.임계 구역(Critical Section)이란?임계 구역은 여러 스레드가 동시에 접근하면 문제가 발생할 수 있는 코드 영역을 말합니다. 예를 들어, 다음과 같은 상황을 생각해봅시다.두 개의 스레드가 동일한 변수에 동시에 접근하여 값을 변경하려고 할 때여러 스레드가 동일한 파일에 동시에 쓰기를 시도할 때다수의 스레드가 공유 자료구조(배열, 딕셔너리 등)를 동시에 수정하려고 할 때이런 상황에서 적절한 동기화 없이 동시 접근이 일어나면 '경쟁 상태(Race Condition)'가 발생합니다. 이는 프로그램이 예측 불가능한 결과를 내거나 크래시를 일으키는 원인이 됩니다.NSLock을 사..
-
CloudKit: 모든 엔티티의 프로퍼티 값을 옵셔널로 강제하는 이유Apple🍎/CloudKit 2025. 4. 15. 21:24
CloudKit와 옵셔널: 왜 모든 프로퍼티가 옵셔널이어야 할까?이번에 앱을 만드는 과정에서 CoreData에 CloudKit을 연동시키려고 하자 앱이 빌드되지가 않았는데요.문제는 기존의 엔티티 모델들의 속성 값들이 옵셔널이 아니기 때문이었습니다.그렇다면 왜 CloudKit을은 모든 엔티티의 속성 값이 옵셔널로 강제하는 것일까요?클라우드 환경의 불확실성CloudKit은 네트워크를 통해 작동하는 원격 데이터베이스 시스템입니다. 로컬 데이터베이스와 달리, 네트워크 통신에는 여러 불확실성이 존재합니다연결 중단: 사용자의 인터넷 연결이 언제든 끊길 수 있습니다.데이터 전송 지연: 대용량 데이터를 전송할 때 시간이 오래 걸릴 수 있습니다.부분적 데이터 전송: 모든 데이터가 항상 완전히 전송된다는 보장이 없습니다...
-
Swift 6 : Typed Throws ( 에러도 타입을 줘서 더 명확히 처리하자.)Apple🍎/Swift 2025. 4. 14. 16:52
Swift 6의 Typed Throws: 오류 처리의 새로운 패러다임Swift 6에서 도입된 "typed throws"는 Swift의 오류 처리 시스템에 중요한 발전을 가져왔습니다. 이 기능을 통해 함수가 발생시킬 수 있는 구체적인 오류 유형을 명시적으로 선언할 수 있게 되었습니다. Swift의 기존 오류 처리 방식Swift 5까지는 함수가 오류를 던질 수 있다는 것만 표시할 수 있었고, 어떤 종류의 오류를 던질 수 있는지는 명시할 수 없었습니다:enum DatabaseError: Error { case connectionFailed case queryFailed}enum NetworkError: Error { case timeout case serverDown}// 이 함수는 어떤..
-
iOS 앱 개발에서 버전과 빌드의 이해하기Apple🍎 2025. 4. 12. 21:05
iOS 앱을 개발하고 지속적으로 업데이트하다 보면 반드시 마주치게 되는 개념이 '버전'과 '빌드'입니다. 이 두 가지는 앱의 릴리스 관리에 핵심적인 요소이지만, 많은 개발자들이 그 차이점과 효과적인 관리 방법에 대해 혼란을 겪곤 합니다. 버전(Version)과 빌드(Build) 이해하기버전(Version)이란?버전은 사용자에게 보이는 앱의 '공개 식별자'입니다. 보통 세 개의 숫자로 구성된 형식(예: 1.2.3)을 사용하며, 이를 'Semantic Versioning'(의미론적 버저닝)이라고 부릅니다. iOS 앱에서 버전은 CFBundleShortVersionString 키로 Info.plist 파일에 저장됩니다.버전 번호의 각 부분은 다음과 같은 의미를 가집니다:Major(주 버전): 첫 번째 숫자로,..
-
SwiftUI의 View 재생성, ID 시스템, 그리고 View 계층 구조카테고리 없음 2025. 4. 11. 21:55
구조체는 불변으로 유지하되, 상태는 별도로 관리한다. View 구조체의 불변성과 재생성SwiftUI에서 모든 View는 구조체(struct)로 구현됩니다. 구조체는 Swift의 값 타입(value type)이므로 한번 생성되면 내부 속성을 변경할 수 없는 불변(immutable) 객체입니다.struct CounterView: View { @State private var count = 0 var body: some View { Button("Count: \(count)") { count += 1 } }}상태가 변경될 때(예: count가 증가할 때) SwiftUI는 body 속성만 다시 계산하는 것이 아니라, 완전히 새로운 Counter..
-
SwiftUI의 View 생명주기와 상태 관리: iOS와 macOS의 차이점 상세 분석Apple🍎/SwiftUI 2025. 4. 10. 21:05
문제 상황SwiftUI로 멀티 플렛폼 앱을 개발하면서 다음과 같은 이상한 현상을 경험했습니다.ActivityDetailView에서 활동 데이터를 편집했습니다.편집한 데이터는 데이터베이스에 성공적으로 저장되었습니다.편집 모드에서 보기 모드로 돌아간 후iOS에서는 편집된 최신 데이터가 화면에 표시됩니다.macOS에서는 편집 전의 원래 데이터가 화면에 표시됩니다.같은 코드를 실행했는데도 플랫폼에 따라 다른 결과가 나왔습니다. 데이터베이스에는 제대로 저장되었으나, macOS에서는 UI에 반영되지 않았습니다.플렛폼 별 차이가 생긴 이유NavigationStack(path: $path) { HomeView(viewModel: viewModel, path: $path) .navigationTitle..