What's new in swift

WWDC2020 (swift 5.3과 그 외)

바이너리 사이즈

바이너리 사이즈는 계속 해서 줄어들고 있다고 합니다.

그럼 SwiftUI는?

바이너리 사이즈가 40% 가냥 줄어들었다고 합니다.

메모리 관리

스위프트는 값객체를 사용하기에 오브젝티브씨 보다 더 적은 힙메모리를 사용합니다. 하지만 이전의 swift는 더 많은 힙메모리를 사용합니다. 그이유는 런타임 오버헤드 때문입니다. 캐쉬와 메모리를 만들어서 사용을 하였기 때문이라고 하는데 다른언어들에 비해서도 너무나도 큰 오버헤드 사용량이었습니다.
그래서 그부분에 초점을 맞추고 swift5.3에서는 많이 해결하였다고 합니다. 다만 이 부분을 완전히 해결하기 위해서는 iOS14이상으로 설정해야하지만 이전 버전에서도 조금은 반영되어있다고 합니다.

스위프트 스탠다드 라이브러리

스위프트 스탠다드 라이브러리 위치를 옮겼다고 합니다. Foundation 스택 아래에 위치하게 변경을 하였고 이 말은 옵씨나 씨를 사용해서 개발해야 했던 프레임워크를 개발할수 있다고 합니다.

스위프트 컴파일러

소스코드의 문제가 생기는 부분을 정확하게 가르킬수 있도록 해결했다고 합니다.
왼쪽이 이전버전, 오른쪽이 새로운 버전의 형태라고 합니다. 좀더 자세하고 메모같은형태로 알려준다고 합니다. 더 자세한 내용은 swfit.org에서 확인하시면 된다고 합니다.

코드 완성도

자동완성
딕셔너리나 키패스에서도 자동완성이 타입추론을 통해 완성될수 있게 되었다고 합니다.
자동완성이 15배 빨라졌다고 하는데 .. 믿을수 있을지..

들여쓰기 개선

메소드 체이닝이나 함수호출 튜플등 다양한 곳에서 들여쓰기가 개선되었다고 합니다.

디버깅

런타임에 오류가 생겼을때 좀 더 명확하게 오류를 출력한다고 합니다.

크로스 플랫폼

스위프트는 크로스플랫폼에 대해서 지원을 한다 우분투 센트오에스 아마존리눅스에서도 가능하다. 윈도우에서도 곧 사용할수 있게 된다고 합니다.

스위프트 업데이트

다양한 업데이트가 있지만 그중 중요한것들만 살펴본다고 합니다.

다중 후행클로저 처리

기존에 위와 같은 코드가 있었다면 completion은 후행클로저로 생략할 수 있었습니다.
하지만 이런경우 더 코드가 읽기 어려워진 경향이 있다고 합니다. 그래서 새로운 형태를 내놓았다고 합니다.
위와 같이 다중으로 후행클로저 처리를 할 수 있게 되었습니다.
스유에서도 위와 같이 활용할수 있습니다. 후행클로저를 잘 사용하기 위해서 함수의 이름을 잘 지어라 라고 합니다.

키패스 표현식 함수

키패스 서명이 일치하는 함수 파라미터들은 중복된 선언 들을 제거 할 수 있습니다.

@main

모든 프로그램은 시작점을 지정해야합니다. 스위프트 1.0 이후에는 @UIApplicationMain을 사용할수 있었습니다. 하지만 스위프트 5.3 이후에는 프로토콜이나 슈퍼클래스에 스태틱 메인메소드를 선언하면 됩니다.
이렇게 지정해주면 main.swift 대신에 프로그램 진입점을 알수 있게 됩니다. 즉 app delegate가 사라집니다.

리테인사이클

순환참조가 일어날 가능성이 있는경우, 이스케이핑클로져에서 캡쳐를 하고 있을 경우 self를 쓰도록 강제하고 있습니다. 하지만 이로인해 self.이 너무 많이 쓰인다는 느낌을 받습니다.
하지만 swfit5.3부터는 [self]를 적어줌으로써 해결할수 있습니다.
그리고 swift5.3부터는 struct나 enum타입일경우 순환참조가 일어나지 않으므로 self.을 생략할수 있습니다.

Multi pattern catch clauses

기존에는 error처리를 switch에 의존해야했습니다.
하지만 5.3에서는 아래와 같이 사용할수 있게 바뀌었습니다.

enum강화

아래처럼 다양하게 비교를 해야할 경우
comparable을 이용해서 아래와같이 ≥ 를 이용하여 처리 할 수 있게 되었습니다.

DSL 향상

if let과 switch가 향상되었습니다.
switch문을 이용하여 vstack안에서 다양한 레이아웃을 사용할수 있게 되었습니다.
그리고 최상위 수준에서 dsl사용할경우 아래처럼 @scenebuilder같은것들을 추가해야했지만 이젠 없어도 됩니다.
그 외 자세한것은 what's new in swiftui에서 참고해주세요

Float16

16비트 플로트가 추가되었습니다. 사이즈가 반으로 줄어든 만큼. simd레지스터에 2배의 레지스터를 넣을수 있게 되었습니다. 그로인해 성능도 더 좋아졌다고 합니다.
더 자세한 내용은 explore numerical computing in swift세션을 참고해달라고 합니다.

스위프트 패키지 매니저

자신들이 라이브러리를 만들었다고 합니다. github.com/apple/swift-numerics (다양한 산술에 관한 라이브러리)
github.com/apple/swift-standard-library-preview (새로운 스위프트 맛보기)