>💥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 - 숫자에 관련한 새로운 오픈소스 - 복소수 및 산술 지원뿐만 아니라 일반 컨텍스트에 훨씬 더 유용한 방식으로 사인 및 로그와 같은 모든 기본 수학 함수를 정의