swift
-
좀 더 Low 하게 가보자~ Swift 저수준 메모리 관리Apple🍎/Swift 2025. 4. 25. 20:25
ARC(Automatic Reference Counting)의 작동 원리ARC는 Swift에서 메모리를 자동으로 관리하는 메커니즘입니다.참조 카운팅 기본 원리: 각 참조 타입 객체(클래스 인스턴스)는 자신을 가리키는 참조의 개수를 추적하는 참조 카운트를 가집니다.카운트 증감 동작객체에 새 참조가 생성될 때 → 카운트 증가참조가 범위를 벗어날 때 → 카운트 감소카운트가 0이 되면 → 메모리에서 해제참조 타입강한 참조(strong): 기본값, 참조 카운트를 증가시킴약한 참조(weak): 참조하는 객체가 메모리에서 해제될 수 있음, 참조 카운트 증가 안 함, 자동으로 nil이 됨미소유 참조(unowned): weak과 유사하지만 nil이 되지 않음, 참조 객체가 반드시 자신보다 오래 살아있다고 가정순환 참조 ..
-
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}// 이 함수는 어떤..
-
GCD vs async/await 제대로 알기Apple🍎/Cocurrency 2025. 3. 26. 22:49
Swift에서는 비동기를 처리하는 방법은 크게GCD(Grand Central Dispatch)를 이용하는 방식과 새로 도입된 async/await를 이용하는 법이 있습니다. 하지만 각 방식에 대한 설명들이 너무 추상적이거나 모호하고 중간 과정들이 생략된 경우가 많아서명확한 동작에 대한 이해가 어려웠습니다. 그래서 직접 각 방법들의 과정들을 자세하게 분석해서 비동기 처리에 대한 껄끄러운 느낌을 없애보도록 하겠습니다. GCD 방식 GCD 방식에서는 비동기 동작을 위해서 DispatchQueue에 async 방식으로 작업을 예약합니다. 네트워크 요청이나 파일 IO등 처리 시간이 오래 걸리는 작업들을 global 큐에 넘겨버림으로써메인 쓰레드의 계속된 작동을 보장하기 위해 주로 사용합니다. ( 화면 드로잉 싸..
-
static 키워드 정복하기Programming🧑💻 2025. 3. 25. 21:08
Swift에서 static 키워드는 "프로퍼티를 인스턴스가 아닌 타입 레벨로 올림으로써 타입 내에서 공유하는 속성,기능을 만들 수 있게 해 준다. " 라고 이해하고 있었으며 주로 싱글톤 패턴이나 타입 메서드를 구현할 때 사용했습니다. 따라서 static 키워드를 "타입 레벨의 동작을 지원하기 위해 만들어진 녀석이구나" 정도로 이해하고 있었습니다. 근데 thread-safe 코드 작성에 대해 살펴보기에 앞서 thread-unsafe 한 경우가 무엇이 있는지에 대해 보고 있던 와중에 "정적 지역 변수는 함수 내에 있더라도 data 영역에 저장이 되며 함수의 반환 이후에도 함수의 상태를 기억한다. 즉 여러 쓰레드에서 접근이 가능한 공유 자원으로 취급되기 때문에 주의가 필요하다." 라는 구절을 읽었습니다.그..
-
inout 파라미터 작동 방식 파해치기Apple🍎/Swift 2025. 3. 11. 22:21
Swift에서 함수의 파라미터로 전달 된 값은 타입에 따라 다르게 동작하며,Inout 키워드를 통해 이 동작 방식을 변경할 수 있는데요. 오늘은 이에 대해 자세히 알아보도록 하겠습니다. 기본 파라미터 동작 방식 Swift에는 두 가지 주요 데이터 타입이 있죠? 값 타입 (Value Type) : Int, String 같은 기본 타입 또는 struct, enum 참조 타입(Reference Type) : class 값 타입은 스택에 저장되며 값을 넘겨 줄 때 원래 값을 복사를 하여 복사본을 넘겨주기 때문에 새로 넘겨 받은 곳에서 값을 변경해도 원래 값에는 영향이 가지 않습니다. 그에 비해 참조 타입은 힙에 저장되며 값을 넘겨 줄때 참조값(메모리 주소)를 넘겨주기 때문에 새로 넘겨 받은 곳에서도 같은 ..
-
큐와 덱 : 순서대로 처리하기CS💻/DS & Algorithm 2025. 3. 6. 22:09
큐 초기 상태: [A, B, C, D, E, _, _, _] ^ ^ front reardequeue 후: [_, B, C, D, E, _, _, _] ^ ^ front rear 지난 시간에는 '해시 테이블'에 대해서 알아보았지요. 해시 테이블은 해시 함수를 이용해 키를 인덱스로 변환함으로써 O(1)의 시간 복잡도로 빠른 검색이 가능해졌어요.그리고 서로 다른 키에 대해 같은 인덱스 값이 나오는 '충돌'이 생겼을 때 체이닝이나 개방 주소법등의 기법을 통해 대용량의 데이터를 효율적으로 관리할 수 있게 되었어요. 해시 테이블 : 빠르게 데이터 검색하기자료구조 세번..