Study 8

📚 Concurrency

Defining and Calling Asynchronous Functionsasynchronous function / asynchronous method실행 도중 일시적으로 중단될 수 있는 특수한 함수 / 메서드비동기 함수임을 나타내기 위해서는 async 키워드 사용에러를 던지는 함수라면 throws 앞에 작성func listPhotos(inGallery name: String) async -> [String] { let result = // ... some asynchronous networking code ... return result}비동기 메서드 호출 시, 해당 메서드 반환까지 실행이 일시 중지됨= 결과가 올 때까지 기다려야 하므로 멈춤을 의미실행이 일시 중단될 수 있는 지점 표기를..

Study 2025.06.11

📚 Closure

클로저(Closure)코드 내에서 사용되거나 전달될수 있는 기능적인 블럭타 언어의 closure, anonymous function, lambda 와 유사정의된 컨텍스트 내 모든 상수와 변수에 대해 참조를 캡처하고 저장할 수 있음이러한 것을 closing over라고 함함수에서 소개된 전역/중첩 함수는 클로저의 특별한 경우 클로저의 3가지 형태전역 함수는 이름이 있고 어떠한 변수도 캡쳐하지 않는 클로저중첩 함수는 이름이 있고 해당 코드 내에서 캡쳐된 변수가 있는 클로저클로저 표현식은 lightweight 구문쓰여진 주변부 변수를 캡쳐할 수 있는 이름없는 클로저 클로저 문법을 간결하게 만들어주는 요소 4가지문맥에서 매개변수와 반환 타입을 추론(Inferring parameter and return valu..

Study 2025.06.02

📚 Concurrency Docs 내 일부

Tasks and Task GroupsTask비동기 작업 단위Task는 한 번에 한 가지만 수행하지만 여러 Task를 작업할 경우, Task Group을 통해 동시에 실행되도록 해줄 수 있음async-let실행될 작업에 대해 하위 작업이 생성됨계층 구조의 작업이 가지는 이점상위 작업에서 하위 작업이 완료될 때까지 대기하위 작업에서 작업의 우선순위를 높인다면 상위 작업의 우선순위도 함께 상향됨상위 작업이 취소되면 하위 작업이 자동으로 취소됨작업 내 데이터들이 하위 작업에서도 효율적으로 쓰일 수 있음작업 결과를 반환하지 않는 TaskGroup// 작업의 그룹 생성 await withTaskGroup(of: Data.self) { group in let photoNames = await listPhoto..

Study 2024.09.11

🍎 WWDC21 : Explore structured concurrency in Swift

🍎 WWDC21 : Explore structured concurrency in SwiftStructured Programming구조화 된 프로그래밍정적 범위를 사용해당 범위 내에서만 변수 사용 가능조건부로만 코드가 실행됨범위 벗어나면 종료제어흐름을 보다 직관적으로 알 수 있음프로그램을 위에서 아래로 읽을 수 있음 Completion Examplefunc fetchThumbnails( for ids: [String], completion handler: @escaping ([String: UIImage]?, Error?) -> Void) { guard let id = ids.first else { return handler([:], nil) } let request = thumbn..

Study 2024.09.07

👀 Continuation 알아보기

👀 Continuation ?async 메서드 호출 시, 스레드의 제어권을 포기하는 suspended 현상이 발생함제어권이 다시 돌아왔을 때, 어디서부터 실행할 지에 대한 정보가 있어야함이 때, Suspension Points를 통해 파악하고 중지된 시점부터 재실행함이처럼 작업이 일시정지되고 그 시점부터 재실행되는 것을 Continuation 이라고 명칭 Suspension PointSwift Concurrency 작업이 일시정지되어 결과를 기다리는 지점= 비동기 작업 완료 후 다시 실행되는 시점❓ Heap에 저장되는 이유비동기 작업의 상태 추적힙은 동적으로 메모리를 할당해 복잡한 상태를 유지할 수 있음메모리 관리비동기 함수가 일시정지되었을 때에도 메모리 상에 계속 해당 지점이 남아있어야함즉, 해당 객..

Study 2024.08.24

🍎 WWDC21: Meet async/await in Swift

🍎 WWDC21: Meet async/await in Swift비동기 함수의 공통점호출하면 작업 시작 후 스레드의 차단을 빠르게 해제장기 실행 작업이 완료되는 동안 스레드가 다른 작업 수행 가능 Completion Handle Example일부 작업에 시간이 걸림prepareThumbnaildataTask완료 시, completionHandler를 통해 결과 반환하지만 실패 시에는 어떠한 알림도 받을 수 없음이미지가 보여지지 않고 무한 로딩네 가지 작업을 동기적으로 처리하되 그 내부의 두 작업은 비동기적으로 처리코드의 의도를 명확하게 파악하기 어렵다는 문제가 있었음이를 위해 Result Type을 활용함Result Type을 통해 의식적으로 에러를 보내줄 수 있게됨하지만 여전히 코드를 직관적으로 이해하..

Study 2024.08.20

📚 ARC Docs 정리

작동원리새로운 인스턴스 생성 시, 인스턴스에 대한 정보가 메모리에 할당인스턴스가 필요없어지면 메모리에서 할당 해제해당 인스턴스에 더이상 접근 불가접근하려고 한다면 에러가 발생인스턴스가 도중에 사라지지 않도록 모든 곳에서의 참조를 추적인스턴스에 참조가 하나라도 존재하는 한 메모리에서 해제하지 않음이를 위해 강한 참조를 통해 인스턴스를 참조함 기본 동작class Person { let name: String // 인스턴스 초기화 시 출력 init(name: String) { self.name = name print("\(name) is being initialized") } // 메모리에서 해제 시 출력 deinit { print("\..

Study 2024.08.06

🍎 WWDC : ARC in Swift

ARC수명주기가 다한 객체의 할당을 해제하여 메모리를 관리하는 방식- 참조 횟수를 추적하여 객체의 수명을 결정함- Swift 컴파일러에 의해 수행됨 retain | 참조가 시작되는 시점에 삽입release | 참조가 끝나는 시점에 삽입 컴파일 시점에 처리됨RC가 0으로 떨어지면 객체가 메모리에서 해제됨class Travler { var name: String var destingation: String?}func test() { // 객체 생명주기 시작 let t1 = Traveler(name: "Lily") // Referece Start(1) // init => RC(t1) = 1 // retain // => RC(t1, t2) = 2 let t2 = t1 // End(1), Start(2) /..

Study 2024.08.02