본문 바로가기
WWDC

WWDC 20 - What's new in Swift

by vapor3965 2021. 6. 22.

목차


    • 세션보면서 정리한 내용입니다. 해석이 잘못된 경우가 있을수있으니 발견하시면 댓글로 남겨주시면 감사하겠습니다🙏🏻

     

    https://developer.apple.com/videos/play/wwdc2020/10170/ 

     

    What's new in Swift - WWDC 2020 - Videos - Apple Developer

    Join us for an update on Swift. Discover the latest advancements in runtime performance, along with improvements to the developer...

    developer.apple.com

     

     

     


    요약

    • 👍Swift런타임오버헤드를 비약적으로많이줄였다.
      • 오버헤드가존재하는이유는 다양한캐시와 정보들을 저장하기때문.
      • 이를체감하기위해서는 iOS14최소버전타깃으로정하라
    • 👍5.3부터 multiple trailing closure syntax가 가능하다
      • 이전에는 마지막클로저만 trailing이가능햇슴
    • 👍entry point를 이제는 @main으로 정한다.
    • 👍클로저에서 self를 이제는 캡처리스트에서 정의하여, self를 사용하지않아도된다.
    • 👍클로저에서 값타입인경우의 self는 이제는 더이상 사용하지않아도된다!
    • 👍do,catch 구문에서 에러는 case들을 이제는 catch구문으로받아올수있다.
    • Float16타입이 새로생겼다

     

     


    Swift는 버전이올라갈수록 코드사이즈가 줄어들고있따

    SwiftUI에서는 코드량이엄청줄었다.

    Objective-c인경우 모델을 배열에담을경우, 모두 포인터를가지며 가리킨다.

    swift는 struct는 값타입이므로, 포인터를통해서 접근하지않고 그대로 모델에저장하고,
    string은 작은집합일경우도 모델에저장되고,

    결국 배열에 꽉 안착하게된다.
    즉, 메모리에서연속적으로저장하게된다.

    같은 모델의경우
    swift가 heap사용에있어서 더 적은메모리를 사용한다.


    하지만, swift는 런타임오버헤드땓문에 많은 힙메모리를 사용한다.
    왜냐하면 swift는 많은 캐쉬와 메모리를 start-up때 만들어낸다.
    캐시는 프로토콜conformance, 다른type정보, objective-c와의 브릿지타입에 사용되는 데이터들을 저장한다.

    모든 언어런타임에는 오버헤드가존재하지만, swift는 너무많다. 그래서 최적화할여지가있어보인다.

    하지만..5.3부터는 1/3로줄었다………
    이 장점을누리기위해서는 iOS 최소타겟을 14로해야한다.

    이러한 메모리사용을줄이고, 오버헤드를줄임으로써,
    swift는 더 low-level 수준에서 중요하게작용할수있다.

    • 즉, 더 낮은 low-level수준의 프레임워크를 만들기위해 swift가 사용될수있다.

    Swift는 더 자세하게 에러를 나타낼수있는 진단이생겼다.
    새로운전략을사용한다.

    예를들어, 5.1에서는 아래와같이 일치하지않는 컴파일에러를나타낸다.

    5.3에서는아래와같이더정확하게바꼇다


    더궁금한점은 swift.doc에서볼수있다.


    Code Completion

    • 코드작성시 더 정확하게 타입을나타내준다.

    keyPath도 나타나게해준다.

    최대 xcode11.5과비교하여 code completion이 15배나더빠르다

    SwiftUI에서 엄청빨라졌따

    들여쓰기도 엄청 잘된다.

    이전에는 들여쓰기가이랬다면


    더정확하게, 들여쓰기가된다

     

     

     


    Swift 스탠다드 라이브러리 변화

    아래와같이변화가생겼는데, 몇개만보자


    여기서확인할수있다.

     

    👍Multiple Trailing closure syntax

     

    기존에는 여러개있을경우 이렇게작성해야했다.
    또는 마지막closure만 trailing할수있었다.


    이렇게바꼈다.
    이제중간클로저도 trailing클로저를 적용할수있따.


    가능!


    5.3 - KeyPath expression as Funcctions

    아래 메서드의 클로저를 keypath를이용했다.



    하지만, 클로저는 이제 자동적으로 keypath를 사용할수있또록해준다.


    @main

    • 모든프로그램들은 실행되어지기위해서는 entry point를 지정해야한다
    • 이러한과정에서 boillerplate 코드가추가된다.

    swift.1.0에서부터 @UIApplicationMain 를 AppDelegate에서 사용할수있었다.
    컴파일러에게 실행하도록 main.swift를 암시적으로 생성하게해준다.


    이제는 @main을사용하면 간단히, 컴파일러가 대신 main.swift를 암시적으로만들어준다.

    • command linetool, application, swiftUI 에서 사용가능하다.

     

     

    👍Increased Availability of implicit self in closures

     

    이전에는 탈출클로저에서는 캡처하기위해 self를 명시적으로계속써야했다.

    하지만?! siwft.5.3에서는 self를캡쳐하여 self를 사용하지않아도되게했다!

    하지만, 떄로는 값타입인데, self를 붙이는게 영별로일떄가잇다.
    ( 값타입이니, reference cycle을 만들지않으니까 )

    이제는 struct,enum타입인경우에는!! self를 작성하지않아도된다!

     

     

    Multiple-pattern catch caluses

    • error가 enum으로 여러타입이니까, catch안에서 또 switch-case를 작성해싿.

    하지만, 이제는 catch구문에서도 잡을수있게됐따.

    protocol을 이제 Enum에서도 적용할수있다.
    ( 아래와같을때만, )

     

     

    DSL Enhancements

    • SwiftUI의 declartive syntax를 키워줄.
    • Builder 클로저를 포함한다.

    이전에는 @SceneBuilder를 붙였는데이제는 안붙여도된다.


    SwiftUI에 엄청많은걸넣었다.

    Swift의 새로운기능

    Float16

    Apple Archive

    OSLog

    • 최적화아 굉장히빨라졌따.다양한 포멧형식을제공한다.

    SwiftPagkageManager

    오픈소스

     



    'WWDC' 카테고리의 다른 글

    WWDC 18 - High Performance Auto Layout  (0) 2021.06.23
    WWDC 16 - Understanding Swift Performance  (0) 2021.06.22
    WWDC 19 - Modern Swift API Design  (0) 2021.06.22
    WWDC 19 - Optimizing App Launch  (0) 2021.06.22
    WWDC 19 - Combine In Practice  (0) 2021.06.19

    댓글