Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- swift documentation
- RxCocoa
- 클린 코드
- combine
- 리펙토링
- UICollectionView
- swiftUI
- Observable
- Xcode
- MVVM
- Human interface guide
- tableView
- collectionview
- HIG
- clean architecture
- Clean Code
- UITextView
- Protocol
- 애니메이션
- 스위프트
- rxswift
- ios
- Refactoring
- uiscrollview
- uitableview
- 리펙터링
- 리팩토링
- map
- ribs
- SWIFT
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 2. WWDC2024 정리 - (2) What's new in Swift (Swift의 새로운 기능, ~Copyable, Embedded Swift, C++ interoperability, Typed Throws, Data-race safety) 본문
WWDC 정리/WWDC 2024 정리
[iOS - swift] 2. WWDC2024 정리 - (2) What's new in Swift (Swift의 새로운 기능, ~Copyable, Embedded Swift, C++ interoperability, Typed Throws, Data-race safety)
jake-kim 2024. 6. 17. 01:45Swift 저장소
- Swift의 레포는 원격 저장소는 github을 사용하고 있으며, 기존에는 github.com/apple/* 형태로 관리되고 있었음
- 대표적인 swift github주소: https://github.com/apple/swift
- 이제 swift는 github.com/swiftlang 주소로 이전될 것
- 곧 마이그레이션을 시작할 예정이며 자세한 내용은 Swift.org에 게시
- https://github.com/swiftlang
Swift 언어 업데이트 - 1) Noncopyable types (~Copyable)
- swift에서 value타입이나 reference타입이나 모두 복사가 가능
- Noncopyable types는 이 기본 복사 가능성을 막아주는 역할
- 고유한 소유권을 표현하고자 할 때 적합한 키워드
- 만약 파일 시스템에 접근하는 File 구조체가 있을 때 ~Copyable을 키워드를 사용
- deinit될 때, 초기화 해제 기능을 사용하여 복사할 수 없는 구조체로 표현
- 동일한 File에 대한 곳에서 접근할 때 런타임 문제를 방지해줌
- memory leak도 방지 가능
- 위처럼 작성하고 사용하는 곳에서 아래처럼 사용하면 문제가 발생하는것을 주의
- open하여 fd라는 파일을 열고, File에 fd인스턴스를 주입하기전에 중간에 exit되거나 throw되면 File구조체의 deinit이 실행될 여지가 없어서 fd 파일이 닫히지 않아 memory leak이 발생
- File 구조체의 생성자에서 파일을 직접 열고, 닫는 기능 모두 담당하도록 기능을 위임하면 안전하게 코드 유지가 가능
- 특히 File 시스템은 복사 비용이 큰데, 이런점에서도 ~Copyable을 유용하게 적용이 가능
- 왼쪽 화면처럼 init? 에서 파일을 오픈하도록 구현
- 이 밖의 더 구체적인 Noncopyable types 개념은 이후 작성될 포스팅 글인 WWDC2024, Consume noncopyable types in Swift 세션 참고
Swift 언어 업데이트 - 2) Embedded Swift
- 기존에는 적은 메모리 공간을 위해서는 C, C++을 사용하여 시스템에서 프로그래밍하는데 유리하기 때문에 C와 C++을 Embedded 프로그래밍에 사용했었음
- 이제 Swift로도 Embedded 프로그래밍이 가능
- 이제 Swift는 매우 작은 독립 실행형 바이너리를 생성할 수 있기 때문
- 독립 실행형 바이너리를 생성할 수 있는 원리
- any타입 기능을 disable되게 설정이 가능
- full generics specialization과 static linking을 통해 적합한 바이너리 생성이 가능
- Embedded Swift는 완전한 Swift 느낌을 주고 있음 (관용적이며 Swift코드를 계속해서 작성할 수 있게 해줌)
ex) Embedded Swift를 활용하여 Swift만으로 콘설에서도 게임이 되도록 구현이 가능
- C, C++이 아닌 Embedded Swift를 활용하여 만들었는데도 아래 게임이 몇 kbyte로 만들기가 가능
Swift 언어 업데이트 - 3) C++ interoperability
- 기존에도 C++ 표준 라이브러리를 Swift로 직접 가져올 수 있었음
ex) C++과 맵핑되는 Swift 코드
- 하지만 기존에 Swift안에 있는 C++ 코드는 보안과 생산성에 관한 부분이 결여되어 있었음
- 이제는 보안과 생산성이 개선됨
Swift 언어 업데이트 - 4) Typed throws
- 기존에 타입에 관한 예외 처리를 위해서는 아래처럼 error를 IntegerParseError로 캐스팅하여 핸들링했었음
- 해당 세션에 의하면, 런타임 시점에 assign되지 않은 예외같은것을 처리할 때 고도로 제한된 시스템에서는 이것이 문제가 발생한다고함
- Swift6에서는 이것을 극복하기 위해 Typed Throws라는 것이 도입
- 기존 throws 키워드 오른쪽에 괄호와 타입을 명시하는것
- 이렇게 처리하면 catch에 들어오는 에러의 타입은 무조건 IntegerParseError임을 알 수 있음
- 기존에 사용하던 throws 키워드 하나만 사용하는 것은 사실상 throws(any Error)라고 이해할 수 있음
- generics와 Type throws를 결합하여 사용하면 특정 오류를 추상화하여 관리도 가능
ex) map함수를 사용할 때 앞에 try를 입력하여 map안에서 특정 케이스에 관해 예외 처리가 되도록 설정
- map을 정의하는 쪽에서는 generics에 예외로 던질 타입을 정의해놓음
Swift 언어 업데이트 - 4) Data-race safety
- Data-race: 여러 스레드가 데이터를 공유하고 그 중 하나가 데이터를 변경하려고 할 때 발생할 수 있는 문제
- Data-race는 concurrency 프로그래밍에서 많이 접하는 오류
- Swift는 Concurrency에서 data-race를 막기 위해서 진화해왔음
- (Actors, Sendable type 등등..)
- Swift는 대표적으로 Sendable 타입을 사용하여 대부분 데이터를 격리하는 작업을 수행함
- Swift5.10부터는 Sendable과 같은 타입을 사용하여 완전한 데이터 격리를 달성
- Swift6부터는 마침내 기본적으로 Data-race safety를 달성함
- Swift6부터는 모든 data-race 문제를 컴파일 타임 오류로 전환함
- 또한 앱의 security도 강화
- Swift6 마이그레이션도 쉽도록 모듈별로 준비가 되었을때 이를 채택할 수 있는 옵션도 제공
* 참고
'WWDC 정리 > WWDC 2024 정리' 카테고리의 다른 글
Comments