2025년 5월 20일, Dart 팀이 Dart 3.8을 공식 발표했습니다. 이번 릴리스는 생산성 향상과 크로스 플랫폼 개발을 위한 여러 가지 유용한 기능이 포함되어 있으며, 코드 포맷팅과 문법 개선, 크로스 컴파일, 웹 핫리로드, FFI 개선 등이 주요 핵심입니다.
이번 블로그에서는 Dart 3.8의 핵심 기능들을 간결하게 정리해보겠습니다.
1. 코드 포맷터(Formatter) 개선
Dart 3.8부터 dart format 명령어를 실행하면 더 똑똑한 스타일 자동 정리가 적용됩니다.
- trailing comma 자동 처리
→ 이제 불필요한 줄바꿈을 줄이고, 더 깔끔한 포맷을 유지합니다. - 중첩된 컬렉션 / 메서드 체이닝 정렬 개선
→ 가독성이 더욱 향상된 코드 스타일 제공
기존 스타일을 유지하고 싶다면 analysis_options.yaml에
formatter: trailing_commas: preserve를 추가해 설정할 수 있습니다.
2. Null-aware 컬렉션 요소 추가 문법
이제 List, Map, Set 내에서 ? 기호를 사용해 null인 요소를 자동으로 제외할 수 있습니다.
var list = [ ?nullableValue, ?anotherNullable?.property, ];
- 조건문 없이도 null-safe한 컬렉션 구성 가능
- 코드 간결성과 가독성 향상
3. 크로스 컴파일(Cross-compilation) 지원
이제 macOS, Windows에서도 Linux 실행 파일이나 AOT 스냅샷을 직접 생성할 수 있습니다.
dart compile exe --target-os=linux --target-arch=arm64
- 예) Mac에서 ARM 기반 서버용 Linux 바이너리 컴파일 가능
- 임베디드 환경, 배포 자동화에 매우 유용
4. Doc import 지원
Dart 문서 주석에서 외부 라이브러리의 심볼을 직접 참조할 수 있는 기능이 생겼습니다.
/// See also: [Future], [Future.value] /// @docImport 'dart:async';
- 문서 주석이 훨씬 명확해지고, 외부 심볼을 쉽게 설명 가능
5. 웹용 Hot reload (실험적 지원)
Flutter 웹 개발자들에게 희소식!
이제 웹에서도 stateful hot reload를 사용할 수 있게 되었습니다. (Dart Development Compiler 기반)
- 실시간 UI 업데이트
- 빠른 테스트 및 디버깅 가능
- 아직 실험적이지만 점차 안정화 예정
6. FFIgen / JNIgen (네이티브 연동 자동화 도구)
- Dart와 네이티브(Android/iOS/시스템) 연동 시 사용하는 FFI와 JNI 바인딩 코드를 자동으로 생성해주는 도구
- 현재는 Early Access 상태로, 향후 정식화 예정
플러그인 개발자, 고급 네이티브 연동이 필요한 경우 큰 도움!
마무리
Dart 3.8은 “더 짧고 깔끔한 코드”와 “더 강력한 플랫폼 확장성”을 목표로 한 중요한 릴리스입니다. 특히 Flutter 개발자나 서버/CLI 환경에서 Dart를 사용하는 개발자들에게 많은 도움을 줄 수 있는 기능들이 도입되었습니다.
정리 요약
Formatter 개선 | 쉼표 자동 조정, 중첩 스타일 개선 |
Null-aware 요소 추가 | ?로 null-safe 컬렉션 구성 |
크로스 컴파일 | 다양한 OS 대상 바이너리 컴파일 지원 |
문서 import | 주석에서 외부 심볼 참조 가능 |
웹 핫리로드 | 웹에서도 실시간 상태 핫리로드 |
FFIgen/JNIgen | 네이티브 연동 자동화 툴 제공 (초기버전) |
필요하다면 pubspec.yaml에 아래처럼 SDK 버전을 명시해 최신 버전을 사용하세요.
environment: sdk: ">=3.8.0 <4.0.0"
Dart 3.8로 프로젝트를 정리하고 싶은 분들이라면 이번 기회에 dart format 한 번 돌려보시고, 새 문법도 직접 적용해보세요!
문의나 질문은 댓글로 남겨주세요. 감사합니다 오늘도 즐코 빡코
'Flutter' 카테고리의 다른 글
Riverpod 3.0 정리 – 주요 변경사항과 사용법 (0) | 2025.07.20 |
---|---|
Flutter에서 토스 복권 스크래치 복권 구현하기 (2) | 2025.07.14 |
Flutter: include of non-modular header inside framework module 'firebase_core.FLTFirebasePlugin' (2) | 2025.05.18 |
Flutter에서 API 호출 시 꼭 알아야 할 것들 (2) | 2025.05.13 |
logger - Flutter 에서 Print말고 logger 사용하기 (0) | 2025.05.08 |