https://developer.apple.com/videos/play/wwdc2024/10184/
해당 포스트는 위 영상을 기반으로 개인적으로 메모/정리한 글입니다.
개요
Swift 의 필수 기능과 설계 철학에 대해 알아보세요.
Swift
- Swift 자랑: Modern, expressive, safe language. Cross-platform language(Server/Embedded Swift).
- Swift의 Core feature: Value Type, 에러&옵셔널, Code organization, 클래스, 프로토콜, 동시성, 확장성 등
Value types
- Value 타입의 인스턴스는 상태(State)를 공유하지 않는다.
- Identity가 없다. 두 개의 Value가 같다면 두 값은 상호교환가능(interchangeable)하다. (ex: Int)
Errors and Optionals
- 오류의 원칙
- 오류가 발생할 수 있는 코드는 확실히 마크되어야 함.
- 오류는 반드시 유저를 위한 정보(context)를 포함하고 있어야 함.
- 개발자의 실수(invalid array boundary 등)는 복구 가능한 오류(recoverable error, 스펙 상 에러 등)와 구분 됨.
- 에러와 옵셔널 타입을 통해 모든 가능성을 처리하는 코드를 만들자!
Code organization
Swift의 코드 조직(code organization) 단위에는 2가지 종류가 있음 - modules & packages.
모듈은 항상 함께 빌드되는 소스 파일들의 묶음(collection). 이런 모듈들의 묶음을 패키지로 배포할 수 있다.
Access control levels: internal 은 같은 모듈 내 접근 가능, package 는 같은 패키지 내 접근 가능(같은 패키지 내의 다른 모듈에도 접근 가능함)
Classes
Class(Reference type)를 써야 하는 순간들: shared mutable state 가 필요할 때, identity 를 가지는 객체, 상속이 필요한 경우.
Concurrency
- Task
- Swift Concurrency 의 기본 유닛. 독립적인 동시 실행 컨텍스트(independent concurrent execution context).
- 가볍기 때문에 많이 생성해도 된다. (low overhead)
- ex) Running 중이던 Task에서 서버 리스펀스가 오는 것을 기다리는 동안 Suspended 되어서 CPU를 다른 Task 에 양도할 수 있습니다. 이것은 자동으로 이루어집니다. 코드로는 async/await 문법으로 모델링됩니다.
- 중요: async 함수는 suspended 될 수 있는 가능성이 있다는 것을 염두에 두고 코드 짜기.
- Data-race safety
- Swift 6 부터는 컴파일 타임에 완전한(?) data-race 안전을 보장합니다
- 동시성 환경에서 주고받는 값을 `Sendable` 로 만들면 Data-race 에 안전하다. 어떤 타입을 Sendable 하게 만들 수 있는 방법은 여러가지가 있지만, `actor` 가 가장 편한 방법이다.
- Actors
- Reference type
- 같은 Reference type 인 클래스와 구분되는 점: shared mutable state 캡슐화. Task 실행을 serialize 함으로써 이 state를 자동으로 보호해준다. Actor 에서는 한 번에 오직 하나의 Task 만 실행 가능하다.
Extensibility
Property wrappers: 간단한 어노테이션(@Xxx)으로 보일러 플레이터 없이 프로퍼티 동작을 재사용가능하게 추상화 해줌
Result builders: 간단한 문법으로 선언적 빌드 코드를 만들 수 있다. Regex builders 가 이것을 도입했음.
import RegexBuilder
let dollarValueRegex = Regex { // Equivalent to "\$[0-9]+\.[0-9][0-9]"
"$"
OneOrMore(.digit)
"."
Repeat(.digit, count: 2)
}
Macro: 컴파일러 플러그인 역할을 한다. Syntax tree 를 인풋으로 받고 변환된 코드를 아웃풋으로 반환해줌.
'WWDC > 2024' 카테고리의 다른 글
Demystify explicitly built modules (추천세션!) (0) | 2024.08.08 |
---|---|
Migrate your app to Swift 6 (추천세션!) (0) | 2024.08.08 |
Consume noncopyable types in Swift (0) | 2024.08.08 |
What’s new in App Store Connect (0) | 2024.08.07 |
What’s new in Swift (0) | 2024.08.07 |