Flutter와 함께 2020년 처음으로 Dart의 공식 릴리즈도 발표 되었습니다. 2020년 5월 6일 발표된 2.8.1에 반영한 사항은 GitHub의 Dart SDK에서 확인 가능합니다 (참조: https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#281—2020-05-06). 공식 사이트에서 강조한 2.8.1의 가장 큰 변화는 non-nullable types에 대해서 향후 버전에 있을 사항에 대하여 미리 사전 준비를 한 것이라고 합니다. 이외에도 주요 코어 라이브러리에 대한 개선 작입이 이루어 졌습니다.
이 글에서는 Flutter와 마찬가지로 Michael Thomsen의 “Announcing Dart 2.8″의 주요 부분을 요약하고자 합니다 (출처: https://medium.com/dartlang/announcing-dart-2-8-7750918db0a).
Preparation for Null Safety
프로그램의 변수가 null 값을 가진 다는 것은 장점도 있지만, 매우 많은 에러와 버그의 원인이 되기도 합니다. Dart 언어는 이러한 null 값을 가지는 경우에 대한 안전성을 제공하기 위하여 노력해 왔습니다. null 값을 가지는 경우와 그래서는 안되는 경우에 대한 구분을 반영하기 위하여 Dart는 계속 개선 중이며, 이를 통해서 이런 타입의 변수들이 안정적으로 동작하고, null 값이 아닌 변수들에 대한 최적화된 코드 생성 등의 작업이 꾸준하게 이루어 지고 있습니다.
Null safety를 강화하기 위하여, Dart 언어와 라이브러리들에 큰 변화가 있었다고 합니다. dart:core, dart:async, dart:io에 중점적으로 변화가 있었으며, 이에 대해서는 https://github.com/dart-lang/sdk/issues/40686에서 보다 구체적으로 확인이 가능합니다.
Enhanced Package Ecosystem
가장 먼저 Dart/Flutter의 패키지를 관리하는 pub.dev 저장소의 성능 개선이 이루어 졌다고 합니다. 이를 위해서 pub outdated 명령이 새롭게 만들어 졌는데, 기 개발한 프로그램이 사용하는 패키지들의 의존성 점검 등을 효과적으로 진행하고, 업데이트를 제공합니다.
프로젝트에서 사용하는 package 들과 이들의 의존 관계를 정의한 pubspec.yaml 화일을 프로그래머가 만든후, pub get을 실행하면 puspec.lock 화일이 생성 됩니다. 이전의 문제는, 이후 pub upgrade를 하더라도 major 버전의 업그레이드는 이루어지지 않는다는 점 입니다. 이 부분에 대해서 pub outdated는 minor 버전의 업그레이드 가능성에 대한 분석과 함께 pubspec.yaml 화일의 수정에 대한 guideline을 제공하여 major 버전으로의 안정적인 업그레이드에 대한 가이드라인을 제공합니다.
예를 들어, 아래의 그림의 경우, pubspec.yaml에 foo는 1.3.0으로, bar는 2.0.1로 되어 있는 경우입니다. pub upgrade를 통해서 업그레이드가 가능한 버전은 각각 1.3.1과 2.1.0입니다. 하지만, bar의 경우 3.0.3의 버전이 가용한 것을 볼 수 있습니다. 이경우 pubspec.yaml의 dependencies를 ^3.0.3으로 변경 하고, pub upgrade를 수행하여, 최신 버전으로의 업그레이드 가능합니다.
pub get 명령에 대해서는 병렬로 fetch 하는 기능이 추가되어 성능 개선이 이루어 졌습니다. 이를 통해서, flutter create 후에 실행하는 실시한 flutter pub get의 속도가, Flutter 1.12 (Dart 2.7)에서는 6.5초가 걸리는 경우에 대해서, Flutter 1.17 (Dart 2.8)에서는 2.5초로 줄어 들었다고 합니다. Flutter가 제공하는 Flutter gallery 프로그램의 경우도 같은 작업에 15초가 걸렸지만, 이번 릴리즈에서는 3초로 줄어 들었다고 합니다.
마무리
Flutter 1.17.0에 이어서 Dart 2.8.1 릴리즈에 대해서 살펴 보았습니다. Flutter의 경우는 UI/UX에 대한 부분이 시선을 끌기에 그런 부분에 대한 개선이 확실하게 보이지만, Dart 언어는 언어 자체의 안전성과 이를 둘러싼 코어 도구들의 개선이 중점적으로 이루어 지고 있는 것을 볼 수 있습니다. 이렇듯 1년에 2~3회에 이루어 지는 릴리즈를 지속적으로 살펴보면, 어느 순간 Dart/Flutter의 성장과 함께 발전하는 개발자로서의 자신을 발견할 것 같습니다.
너무나도 글 잘 보고 있습니다. 다른 학교라서 수업을 못 듣는게 아쉬울 정도로 잘 보고 있습니다. 앞으로도 다트나 플러터의 관한 글을 올려주셨으면 해서 댓글 남겨봅니다.