뚝딱뚝딱 모바일

[Dart] Dart 3.2, 어떤 것이 업데이트 됐을까? 본문

Flutter 지식

[Dart] Dart 3.2, 어떤 것이 업데이트 됐을까?

규석 2023. 11. 20. 17:54

안녕하세요!

며칠 전, Dart 3.2가 업데이트 되어, 그 내용을 바탕으로 리뷰해 보도록 하겠습니다.


https://medium.com/dartlang/dart-3-2-c8de8fe1b91f

 

Announcing Dart 3.2

Improved language & developer experience, and an update on web apps & Wasm

medium.com

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에서 확인할 수 있는 것 같습니다.

Serverpod 1.2에 계획된 DevTools 지원

 

Dart Web 및 Wasm(웹어셈블리) 업데이트

Dart-to-Wasm 컴파일러의 기능이 완성되어 가고 있다 합니다. 성능과 호환성에 대해서는 만족 중이고, 많은 시나리오에서 속도가 빠름을 보장하려 한답니다. 해결해야 할 문제가 몇 가지 있지만, Flutter 웹의 호환성 및 속도를 더욱 향상했다고 합니다.


이렇게 Dart 3.2 업데이트 내역을 알아보았습니다. 더 자세한 내용은 글 상단의 링크를 통해서 보실 수 있습니다.

문법적인 내용들보다는, 속도와 퍼포먼스 관련 내역들이 많은 것 같습니다.

앞으로 업데이트들은 마이너 버전이 바뀔 때마다 해보도록 하겠습니다!