분류 전체보기 31

📚 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

❓ Enum(2)

안녕하세요!이전에는 Enum이란 뭐고 어떻게 사용하는지, 원시값 RawValue가 뭔지 알아봤습니다!오늘은 Enum의 연관값이랑 CaseIterable이라는 프로토콜을 채택해서 어떻게 활용할 수 있는지 알아볼게요🔥  🧐 연관값은 왜 필요할까이전에 사용했던 예제를 살펴보면 각 OS에 대해 명시하고 있기는 하지만 각 OS가 몇 버전인지는 명시해주고 있지 않습니다enum AppleOS { case iOS case MacOS case TvOS case WatchOS} 그런데 이제는 iOS이면서 최신버전인 17.5일 때, 무언가를 처리하고 싶은 겁니다그러면 이런 식으로 사용하게 되겠죠?switch AppleOS { case .iOS: if version == 17.5 { ..

Swift 2024.07.12

❓ Enum(1)

안녕하세요!오늘은 조건을 좀 더 간결하게 처리할 수 있는 Enum! 풀어쓰면 Enumeration이라는 친구를 알아볼게요!  ❓ 열거형 Enum(Enumeration)Enum은 방금 말씀드린 것처럼 조건을 좀 더 간결하게 처리할 수 있게 만들어줍니다그전에 왜 그런 특성을 가지냐 하면~ Enum은 개발자가 정의한 같은 주제를 공유하는 데이터들로 구성되거든요 예를 들어, 각 'AppleOS'에 맞게 조건을 처리한다고 해볼게요그럼 아마 iOS, MacOS, TvOS, WatchOS로 조건을 처리하게 되겠죠?이를 if-else문으로 풀어보자면if os == 'iOS' {} else if os == 'MacOS' {} else if os == 'TvOS' {} else if os == 'WatchOS' {} el..

Swift 2024.07.10

❓ Switch-Case

안녕하세요! 사실 이번 글은 열거형으로 가져오려고 했는데, 그럼 Switch문이 사용되잖아요..?혹시 Switch문을 잘 모르시는 분들이 계실까 해서 오늘은 Switch-Case문부터 한 번 알아보려고 합니다  ❓Switch-CaseSwitch-Case문이 어떤건지 살펴보기 전에 언제 사용되는지 알아볼게요 우선 if-else문에서 나이를 조건으로 학교를 나눠주게 된다면 아래와 같이 코드가 작성될 겁니다if age >= 1 && age = 8 && age = 14 && age = 17 && age   그런데 막상 쓰고 보니 가독성도 별로고.. 쓰는 과정 속에서 age를 쓰는 것도 귀찮은 거죠 😅 그래서 이렇게 다양한 경우의 수를 어떻게 좀 더 간결하고 간단하게 처리할 수 있을까 싶을 때 Switch-Ca..

Swift 2024.07.08

❓ Optional Chaining

안녕하세요!오늘은 옵셔널 시리즈의 마지막글로 옵셔널 체이닝에 대해 알아보겠습니다!!  ❓ Optional ChainingChaining이라는 단어를 들으면 어떤 느낌을 받으실까요?체인이 막 연결되어 있는 형태니까 얘도 이런 걸 뜻하는 게 아닐까~?라고 하신다면 맞습니다!옵셔널을 연쇄적으로 사용하는 것이거든요! 저만 그런지는 모르겠지만.. 개발 중에 객체 내 해당 프로퍼티가 옵셔널타입이었던걸 잊어버릴 때가 있습니다그래서 무작정 불러와! 하고 쓰게 되죠😅 바로 아래처럼요// yunie라는 인스턴스의 pet이라는 프로퍼티에 접근해서 petName을 가져와줘yunie.pet.petName 그런데 만약 저 yunie인스턴스와 그의 내부 프로퍼티인 pet이 옵셔널 타입이라면..?옵셔널을 해제해주는 어떠한 과정도 ..

Swift 2024.07.05