일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- copy on write
- fastlane
- abstact
- Android
- 성능 개선
- Codemagic
- struct
- PG결제
- appstore
- reactivex
- TextInputFormatter
- MVVM
- FLUTTER
- SHIMMER
- 갤럭시폴드
- FocusNode
- BloC
- delegate
- GetX
- shorebird
- reject
- IOS
- Xcode
- Equatable
- Swift
- 무선빌드
- Codepush
- DevTools
- flutter web
- error
- Today
- Total
뚝딱뚝딱 모바일
[Dart] Dart 3.2, 어떤 것이 업데이트 됐을까? 본문
안녕하세요!
며칠 전, Dart 3.2가 업데이트 되어, 그 내용을 바탕으로 리뷰해 보도록 하겠습니다.
https://medium.com/dartlang/dart-3-2-c8de8fe1b91f
Non-null promotion for private final fields
(사실 번역해서 적고 싶은데, 정확히 뭐라 표현할지 모르겠네요... 굳이 굳이 하자면, private final 필드에서의 Non-null 인식...?)
코드로 바로 보시면 이해가 쉬우실 겁니다.
int definitelyInt(int? aNullableInt) {
if (aNullableInt == null) {
return 0;
}
// If flow analysis reaches this point,
// aNullableInt can safely promote to a non-null int.
return aNullableInt;
}
함수 시작 부분에서 매개변수로 받아온 aNullableInt가 null이면 바로 0을 return 하였습니다. 그리고 if문을 나와 aNullableInt를 return 하고 있습니다. if문으로 null일 때, 0을 반환해 주었기에 아래부터는 aNullableInt가 Non-null로 취급됩니다.
Dart 2.12부터 그랬잖아요? 달라진 게 없는데요?
맞습니다. Dart 3.2에서 달라진 점은 이러한 조건 검사를 통한 Non-null 취급을 지역 변수에 제한하지 않는다는 점입니다.
class Container {
final int? _fillLevel;
Container(this._fillLevel);
check() {
if (_fillLevel != null) {
int i = _fillLevel; // Prior to Dart 3.2, causes an error.
}
}
}
check 함수 내에서 _fillLevel이 null이 아니면 i 변수에 넣어주었습니다. Dart 3.2 이전 버전에서는 오류가 발생하지만, 이제는 이를 허용해 준다고 합니다.
제한을 두었던 이유는 필드가 언제, 어떻게 변경되는지에 대한 판단할 수 없는 복잡한 경우 때문이었다고 합니다. 예를 들어, 이를 상속받은 하위 클래스가 필드를 getter로 재정의하여 null을 반환하는 경우 문제가 생길 수 있습니다. Dart 3.2에서는 flow analysis 엔진을 개선하여 가능해졌다고 합니다.
package:lint 3.0
lint 3.0이 추가되었다고 합니다. lint는 코딩할 때, 사람마다 다른 코드 스타일을 가지고 있으며, 이는 협업할 때 매우 큰 불편함을 주기에 언어의 특성을 고려해 스타일 및 컨벤션을 규정해 놓은 규칙입니다. 무엇이 바뀌었는지는, 이곳에서 확인 가능합니다.
Dart 상호 지원(interoperability) 업데이트
Dart의 원칙은 멀티 플랫폼을 지원해 주는 것이 핵심입니다. 그러나 여전히 Dart만이 아닌 기존 코드와 상호 작용해야 할 필요성이 있습니다. 오래된 프로젝트나 라이브러리, API들의 코드들이 해당될 수 있습니다. 네이티브 C API와 상호 작용하기 위해 FFI를 시작으로 많은 투자를 하였고, 현재는 Java, Kotlin, Swift, Objective C와의 연동을 지원하기 위해 확장하는 작업을 진행하고 있다고 합니다.
DevTools 확장
Dart 3.2 & Flutter 3.16에서는 DevTools를 직접 패키지에 맞는 Custom Tooling을 패키지 제작자가 제공할 수 있게 확장 프레임워크를 발표한다 합니다. 이 프레임워크를 사용하여 패키지 제작자들이 DevTools를 지원해 주면, DevTools에서 확인할 수 있는 것 같습니다.
Dart Web 및 Wasm(웹어셈블리) 업데이트
Dart-to-Wasm 컴파일러의 기능이 완성되어 가고 있다 합니다. 성능과 호환성에 대해서는 만족 중이고, 많은 시나리오에서 속도가 빠름을 보장하려 한답니다. 해결해야 할 문제가 몇 가지 있지만, Flutter 웹의 호환성 및 속도를 더욱 향상했다고 합니다.
이렇게 Dart 3.2 업데이트 내역을 알아보았습니다. 더 자세한 내용은 글 상단의 링크를 통해서 보실 수 있습니다.
문법적인 내용들보다는, 속도와 퍼포먼스 관련 내역들이 많은 것 같습니다.
앞으로 업데이트들은 마이너 버전이 바뀔 때마다 해보도록 하겠습니다!
'Flutter 지식' 카테고리의 다른 글
[Flutter] 앱에서는 WebView, 웹에서는 iframe 구분하기 (0) | 2023.11.30 |
---|---|
[Flutter] 플랫폼 구분을 해보자 (1) | 2023.11.24 |
[Flutter] 앱 성능 측정을 해보자 (1) | 2023.11.14 |
[Flutter] Fastlane으로 배포 자동화를 해보자 (2) (0) | 2023.11.10 |
[Flutter] Fastlane으로 배포 자동화를 해보자 (1) (0) | 2023.11.09 |