본문 바로가기
WWDC/2024

A Swift Tour: Explore Swift’s features and design

by 찜토끼 2024. 8. 7.

https://developer.apple.com/videos/play/wwdc2024/10184/

 

A Swift Tour: Explore Swift’s features and design - WWDC24 - Videos - Apple Developer

Learn the essential features and design philosophy of the Swift programming language. We'll explore how to model data, handle errors, use...

developer.apple.com

해당 포스트는 위 영상을 기반으로 개인적으로 메모/정리한 글입니다.

개요

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). 이런 모듈들의 묶음을 패키지로 배포할 수 있다.

패키지A에 속하는 모듈이 패키지B에 속하는 모듈에 의존할 수도 있다

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