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이면?
}

마이그레이션 전략

  1. 늦은 초기화가 필요한 곳 파악: StatefulWidget의 필드, DI 컨테이너 등
  2. Optional 파라미터 검토: null 허용 여부를 명확히
  3. JSON 파싱 로직: 서버 응답이 null일 수 있는 필드 구분
// late 키워드 활용 예상
class MyWidget extends StatefulWidget {
  late AnimationController controller;
  
  @override
  void initState() {
    controller = AnimationController(...);
  }
}

현재 결정

아직 베타라 프로덕션 적용은 보류했다. 하지만 새 코드 작성 시 null 체크를 더 철저히 하는 방향으로 가이드를 수정했다.

Flutter 1.20에서 정식 지원될 예정이니 그때 본격 마이그레이션할 계획이다.