Flutter 앱에서 Null Safety 준비하기
배경
재택근무로 전환된 뒤 Flutter 프로젝트 리팩토링 시간이 생겼다. 마침 Dart 팀에서 Null Safety를 발표했고, 기존 코드베이스에 어떤 영향이 있을지 검토했다.
Null Safety란
Dart 2.9부터 베타로 제공되는 기능이다. 변수가 null을 가질 수 있는지 타입 시스템 수준에서 구분한다.
// 기존 방식
String name; // null 가능
// Null Safety
String name; // non-nullable
String? name; // nullable
현재 프로젝트 분석
우리 앱은 약 15,000줄 규모다. Null 체크 없이 접근하는 코드가 많았다.
class User {
String name;
String email;
User(this.name, this.email);
}
// 이런 코드가 많았음
void updateUser(User user) {
print(user.name.length); // user가 null이면?
}
마이그레이션 전략
- 늦은 초기화가 필요한 곳 파악: StatefulWidget의 필드, DI 컨테이너 등
- Optional 파라미터 검토: null 허용 여부를 명확히
- JSON 파싱 로직: 서버 응답이 null일 수 있는 필드 구분
// late 키워드 활용 예상
class MyWidget extends StatefulWidget {
late AnimationController controller;
@override
void initState() {
controller = AnimationController(...);
}
}
현재 결정
아직 베타라 프로덕션 적용은 보류했다. 하지만 새 코드 작성 시 null 체크를 더 철저히 하는 방향으로 가이드를 수정했다.
Flutter 1.20에서 정식 지원될 예정이니 그때 본격 마이그레이션할 계획이다.