---
# System prepended metadata

title: ' What''s new in Swift (WWDC 20)'

---

>💥Swift의 새로운 점!
- 더 많은 플랫폼 지원 (여러 도메인 문제 해결 위해)
- 런타임 성능에서 중요한 발전
- 버전업이 될 수록 code size가 감소하고 있음  

>code size

앱의 일부이고 앱의 logic에서 기계어를 말함

![](https://hackmd.io/_uploads/HyoLjC5_2.png)

Swift 5.3에 오면서까지 옵젝씨의 비율이 점점 줄어들고 있음

![](https://hackmd.io/_uploads/HyKtjAqd2.png)

스유에서도 code size가 크게 개선 됨

- 메모리 할당 면에서 값 유형은 참조 유형보다 이점이 있다.
    - 왜그런지 예를 들어보자

> 옵젝씨

![](https://hackmd.io/_uploads/HktChRqdn.png)

> Swift

![](https://hackmd.io/_uploads/r1jz6Cquh.png)

Swift는 값 타입을 사용하기 때문에 옵젝씨처럼 포인터를 통해 값에 접근할 필요가 없다.


![](https://hackmd.io/_uploads/rJHc6R9un.png)

Swift 5.1과 옵젝씨의 메모리 사용량 비교

![](https://hackmd.io/_uploads/S16Yp0qOn.png)

하지만, swift는 런타임 오버헤드때문에 많은 힙메모리를 사용한다.
이전에 Swift는 시작할 때 많은 캐시와 메모리를 생성했다.
모든 언어 런타임에는 약간의 오버헤드가 있지만 Swift의 경우 너무 컸기 때문에 최적화하는 데 큰 중점을 두었다.

> 최적화 결과

![](https://hackmd.io/_uploads/HJNlRC5_3.png)
 
5.3은 5.1에 비해 힙메모리를 3/1 미만까지 사용하게 되었다. => iOS 14부터 가능

그 이외 개선된 점
- 더 낮은 low-level수준의 프레임워크를 만들기위해 swift가 사용될 수 있게 됨
    - 옵젝씨나 씨를 사용해 개발해야 했던 프레임워크를 개발할 수 있게 됨 good
- 더 자세하게 에러를 나타낼 수있는 진단이 생김
- 코드 작성시 더 정확하게 타입을 나타내줌
- keyPath도 나타나게해준다.
- code completion이 15배나 더빠름
- 들여쓰기 정확도도 높아짐
- 디버거는 불투명한 "잘못된 명령" 충돌을 표시하는 것에 그치는 게 아니라 런타임 실패 트랩에 대한 이유도 표시함
- 크로스 플랫폼 지원
    - Apple platforms
    - Ubuntu 16.03, 18.04, 20.04
    - CentOS 8
    - Amazon Linux 2
    - Windows
- 오픈소스인 Swift AWS runtime을 이용해 서버리스 기능을 ㅜ십게 구현할 수 있게 함
- 언어와 라이브러리 
    - 원래 마지막 클로저만 trailing closure 적용이 됐는데, 중간 클로저도 적용가능해짐
        - ![](https://hackmd.io/_uploads/Ska5kysuh.png)
        - ![](https://hackmd.io/_uploads/HJ_o11ju3.png)
    - 클로저에서 keypath가 자동으로 뜸
        - ![](https://hackmd.io/_uploads/rJY7xJi_3.png)
        - $0.shoeSize => \.shoeSize
    - @main(프로그램 시작점 지정)을 사용하면 컴파일러가 대신 main.swift를 암시적으로 만들어준다. (원래는 @UIApplicationMain이었음)
    - 클로저의 캡쳐 리스트에서 self를 써주었다면 body에서는 생략해도 됨
        - ![](https://hackmd.io/_uploads/rkKbWJs_2.png)
    - struct, enum 타입인 경우는 self를 안써줘도 됨 (순환 참조를 만들지 않으니까)
    - do-catch 문의 변경
        - 변경 전![](https://hackmd.io/_uploads/ryvt-ysOh.png)
        - 변경 후![](https://hackmd.io/_uploads/ryC_Zksdn.png)
    - Float16 추가 (2byte 메모리)
    - OSLog (통합 로깅 시스템) 개선
        - 에러가 일어나면 print를 해서 콘솔창으로 확인하던 방식과 달리 로그를 남길 수 있음
        - 재현하기 어려운 버그를 추적할 수 있음
    - Swift Numerics
        - 숫자에 관련한 새로운 오픈소스 
        - 복소수 및 산술 지원뿐만 아니라 일반 컨텍스트에 훨씬 더 유용한 방식으로 사인 및 로그와 같은 모든 기본 수학 함수를 정의
