WWDC/Swift 17

[Swift] WWDC22 - Eliminate data races using Swift Concurrency (1)

서론 Swift Concurrency와 GCD를 비교하는 포스팅을 쓸 때 Swift Concurrency는 Data race에 안전하다고 했었습니다. 당시에는 정확히 어떻게 data race를 방지해주는지 알지 못했죠. 마침 WWDC22에 관련 내용이 있어 정리해보기로 했습니다. Sendable (https://developer.apple.com/documentation/swift/sendable)에 대한 내용을 미리 읽어보고 아래 내용을 보시면 더 이해가 쉬우실 것 같네요. 물론 아래에서도 Sendable에 대한 내용이 나오니 나중에 읽으셔도 괜찮습니다 ㅎㅎ 추가로 Actor에 대한 것도 다루는데 전 Actor에 대한 사전 학습이 되어 있지 않아 이해하기 너무 어려웠습니다. 그래서 이번 포스팅에서 다루..

WWDC/Swift 2022.09.26

[Swift] WWDC21 - Meet async / await in Swift

서론 이번에 들은 WWDC 영상은 "Meet async / await in Swift" 입니다. 처음으로 async / await에 대해 소개해주는 영상인데요. 사실 지난 포스팅에서 다룬 내용과 겹치는 내용이 많아 복습하는 기분이 들긴 했습니다. 그래도 async / await는 아직도 어려운 부분이 있어서 정리하면 좋겠죠. (아마 동일한 주제로 2~3개 더 올리지 않을까... 싶네요 ㅎㅎ;) Functions: synchronous and asynchronous UIKit에는 이미 많은 동기, 비동기 함수가 있습니다. 이번 영상에서는 UIImage를 예시로 들었습니다. size에 맞게 썸네일을 가져오는 메서드로 위쪽 메서드는 동기 버전, 아래쪽 메서드는 비동기 버전입니다. 비동기 버전에는 escapin..

WWDC/Swift 2022.09.20

[Swift] WWDC15 - Optimizing Swift Performance

저번 Understanding Swift ... 도 그렇고 이번 Optimizing Swift Performance도 그렇고 Swift에 관한 WWDC 내용은 정말 어렵네요 ㅠㅠ 여러 번 돌려봐야겠습니다... Optimizing Swift Performance Swift에는 클로저, 프로토콜, 제네릭, ARC처럼 좋은 기능이 많이 있습니다. 이런 고차원의 기능이 많으면 프로그램이 할 일이 많아지기 때문에 속도는 느려지기 마련입니다. 하지만 Swift는 고도로 최적화되어 native 코드를 굉장히 빠르게 컴파일해줍니다. Swift는 어떻게 두 마리 토끼를 다 잡았을까요? 애플은 위 사진의 모든 고급 기능들을 최적화하였습니다. Array Bounds Checks Optimizations 모두 알아볼 수 없으..

WWDC/Swift 2022.09.17

[Swift] WWDC22 - Embrace Swift generics

서론 WWDC22는 모든 세션에서 한글 자막을 지원합니다. 한글 자막이 어떤지 궁금해서 요즘 공부 중인 Generic에 관련된 세션을 보고 정리해보았습니다. 한글 자막에 대한 후기도 마지막에 가볍게 말해볼게요. Abstraction 추상화(Abstraction)에 대한 개념으로 영상이 시작됩니다. 아래 코드를 봅시다. 코드에서 * .pi / 180.0 이 중복됩니다. 중복되는 코드를 함수로 묶어 추상화가 가능하고 보일러 플레이트를 줄일 수 있습니다. 이번 포스팅(영상)에서는 농장 환경을 구성하는 코드를 예시로 들고 있습니다. Model with concrete types 첫 번째로 Cow 구조체가 있습니다. Cow 구조체는 eat 메서드를 가지고 있고 먹이로 Hay 구조체를 전달합니다. (Hay : 건초..

WWDC/Swift 2022.09.16

[Swift] WWDC16 - Understanding Swift Performance (3)

이전 글 Understanding Swift Performance (2) Generic drawACopy는 Generic을 이용해 매개변수 제약 조건을 주고 있습니다. 이는 프로토콜 타입과 무엇이 다를까요? 제네릭 코드는 매개변수 다형성이라고도 하는 보다 정적(static) 형태의 다형성을 지원합니다. 함수 foo는 Generic으로 만들어졌고 Drawable만 받을 수 있습니다. Point는 Drawable 프로토콜을 준수했으니 foo의 파라미터로 사용할 수 있습니다. 이 foo 함수가 실행되면면 Swift는 제네릭 타입 T를 Point 타입에 바인딩 합니다. 함수 foo가 바인딩과 함께 실행될 때 bar가 호출되면 local 변수는 직전에 사용한 타입인 Point를 가지게 됩니다. 타입은 매개변수를 ..

WWDC/Swift 2022.09.08

[Swift] WWDC16 - Understanding Swift Performance (2)

이전글 [Swift] Understanding Swift Performance (1) 지난 시간 지난 시간의 핵심은 최적화를 진행하는 방법이었습니다. 내 인스턴스가 스택과 힙 중 어디에 할당되는지, 인스턴스를 전달할 때 오버헤드가 얼마나 발생하는지, 인스턴스 메서드를 호출하면 어떤 디스패치로 동작하는지 고려해야 합니다. 구조체를 사용하여 다형성 코드를 작성하는 방법은 프로토콜 지향 프로그래밍입니다. Protocol Types 프로토콜 타입을 알아보면서 프로토콜 타입 및 제네릭(Generic) 코드를 어떻게 구현해야 하는지 알아봅시다. 또, 프로토콜 타입의 변수가 저장되고 복사되는 방식과 메서드 디스패치가 작동하는 방식을 살펴봅시다. 이전 포스팅에서 다뤘던 Point와 Line을 프로토콜로 구현했습니다. ..

WWDC/Swift 2022.09.07

[Swift] WWDC16 - Understanding Swift Performance (1)

WWDC 16의 Understanding Swift Performance 세션을 이제서야 보았습니다. 2편에 걸쳐 나눠서 정리해보려고 합니다. (해당 포스팅의 사진은 https://developer.apple.com/wwdc16/416 의 프레젠테이션 슬라이드에서 가져왔습니다.) 참고로 해당 포스팅에서는 메서드와 함수를 구분하여 표현하고 있습니다. 발표도 Method와 Function을 명확하게 구분해서 말하고 있더라고요. 두 개의 차이는 https://jeong9216.tistory.com/472 를 참고해 주세요. Dimensions of Performance 추상화를 만들고 추상화 메커니즘을 선택할 때 세 가지를 고려해야 합니다. 인스턴스가 스택에 할당되는지 힙에 할당되는지 인스턴스를 전달할 때 참..

WWDC/Swift 2022.09.07
반응형