Apple🍎/Swift
-
좀 더 Low 하게 가보자~ Swift 저수준 메모리 관리Apple🍎/Swift 2025. 4. 25. 20:25
ARC(Automatic Reference Counting)의 작동 원리ARC는 Swift에서 메모리를 자동으로 관리하는 메커니즘입니다.참조 카운팅 기본 원리: 각 참조 타입 객체(클래스 인스턴스)는 자신을 가리키는 참조의 개수를 추적하는 참조 카운트를 가집니다.카운트 증감 동작객체에 새 참조가 생성될 때 → 카운트 증가참조가 범위를 벗어날 때 → 카운트 감소카운트가 0이 되면 → 메모리에서 해제참조 타입강한 참조(strong): 기본값, 참조 카운트를 증가시킴약한 참조(weak): 참조하는 객체가 메모리에서 해제될 수 있음, 참조 카운트 증가 안 함, 자동으로 nil이 됨미소유 참조(unowned): weak과 유사하지만 nil이 되지 않음, 참조 객체가 반드시 자신보다 오래 살아있다고 가정순환 참조 ..
-
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을 사..
-
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}// 이 함수는 어떤..
-
inout 파라미터 작동 방식 파해치기Apple🍎/Swift 2025. 3. 11. 22:21
Swift에서 함수의 파라미터로 전달 된 값은 타입에 따라 다르게 동작하며,Inout 키워드를 통해 이 동작 방식을 변경할 수 있는데요. 오늘은 이에 대해 자세히 알아보도록 하겠습니다. 기본 파라미터 동작 방식 Swift에는 두 가지 주요 데이터 타입이 있죠? 값 타입 (Value Type) : Int, String 같은 기본 타입 또는 struct, enum 참조 타입(Reference Type) : class 값 타입은 스택에 저장되며 값을 넘겨 줄 때 원래 값을 복사를 하여 복사본을 넘겨주기 때문에 새로 넘겨 받은 곳에서 값을 변경해도 원래 값에는 영향이 가지 않습니다. 그에 비해 참조 타입은 힙에 저장되며 값을 넘겨 줄때 참조값(메모리 주소)를 넘겨주기 때문에 새로 넘겨 받은 곳에서도 같은 ..
-
Swift의 컬렉션 타입 : 값 의미론과 실제 구현Apple🍎/Swift 2025. 2. 28. 20:18
Swift 컬렉션 타입의 완전한 이해기본 컬렉션 타입Swift는 세 가지 주요 컬렉션 타입을 제공합니다:배열(Array): 순서가 있고, 인덱스로 접근 가능한 요소들의 컬렉션딕셔너리(Dictionary): 키-값 쌍으로 이루어진 컬렉션세트(Set): 순서가 없고 중복을 허용하지 않는 컬렉션값 타입으로서의 컬렉션과 메모리 관리복사 시맨틱(Copy Semantics)란? : 컬렉션을 변수에 할당하거나 함수에 전달할 때 개념적으로는 '복사'가 일어납니다. 즉, 원본과 복사본은 서로 독립적인 별개의 인스턴스가 됩니다. 만약 배열이 참조 타입이었다면, copy를 변경했을 때 original도 함께 변경되었을 것입니다.var original = [1, 2, 3]var copy = original // 값 복사c..
-
클로저 종결판 2Apple🍎/Swift 2025. 2. 26. 16:31
죽지도 않고 다시 돌아온 클로저 종결판 아직 못 보신 분은 종결판 1부터 보시고 오세요. 츄라이~ 클로저 종결판앱을 개발할 때 꼭 마주치게 되는 '클로저'라는 놈, 이 정도 봤으면 정들 때도 되었는데이놈이 모양도 야시꾸리하고 형태도 왔다 갔다 해서 뭔가 찝찝한 녀석입니다. 그래서 오늘날 잡고 산산조people-analysis.tistory.com아직 좀 남은 거 마저 해치워 버립시다. 레츠기딧~~ Swift에서 클로저의 생명주기와 메모리 관리를 이해하기 위해서는 이스케이핑(Escaping)과 논이스케이핑(Non-escaping)에 대한 이해가 필요한데요. 같이 한번 차근차근히 알아볼까요? 일단 저번 시간에 배운 클로저는 "생성 시점에 환경을 캡쳐(기억)하기 위해 만들어진 녀석"을머리에 붙들어 메두시고여...