Flutter 2.0 Null Safety

Written by 코드팩토리 JC

1월 15, 2024

Flutter 2.0 가이드

Flutter 2.0!

2021년 3월 4일 기준으로 드디어 Flutter 2.0 버전이 Stable Channel 에 머지가 되었습니다. 머지된 pull request 리스트를 보면 정말 어마어마하게 많은 새로운 기능들이 머지가 된것을 볼 수 있는데 Flutter 개발자들이 오랫동안 요구해왔던 기능들이 머지가 되어서 업데이트 사항을 공부하며 목요일을 정말 힘차게 보낼 수 있는 원동력이 될 것 같습니다. 모든 업데이트 사항을 한번에 분석할 수 없으니 이번 시간에는 Dart 의 Null Safety 업데이트에 대해 알아보는 시간을 갖어보도록 하겠습니다.

Null Safety

Flutter 2.0 버전에서는 Dart SDK 2.12 버전 이상을 사용합니다. Dart 2.12 버전에는 Null Safety 기능이 추가되었는데 개인적으로 정말 마음에 드는 업데이트입니다. 기존 Dart 버전에서는 변수에 Null 값이 들어올 수도 있는 상황에 Null 인 경우를 따로 처리 하라는 에러 메세지를 던지지 않았는데 이때문에 대표적으로 Text 위젯이나 bool 값을 다룰때 까다로운 상황이 생길때가 있었습니다. 이번업데이트로 이런 문제를 100% 해결했다고 볼 수 있겠습니다.

Migration 가이드

Flutter 버전 업그레이드

Flutter 2.0 버전으로 마이그레이션을 하는건 간단합니다.

flutter channel stable
flutter upgrade
ShellScript

를 진행해주시면 현재 스테이블 채널의 최신 버전인 2.0 버전으로 업그레이드를 진행할 수 있습니다.

Null Safety 지원 플러그인 확인하기

Dart 2.12 버전을 최소 버전으로 지원하기 전에 현재 사용하고 있는 플러그인들이 Null Safety 를 지원하는지 확인 해봐야합니다. Flutter 팀도 이 과정이 상당한 장벽이 될거라는걸 인지하고 간단히 확인을 해볼 수 있는 커맨드를 만들어 놨습니다.

dart pub outdated --mode=null-safety
ShellScript

위 커맨드를 프로젝트에서 실행하면 아래처럼 Null Safety 마이그레이션이 가능한 플러그인과 불가능한 플러그인을 골라줍니다.

Null Safety 마이그레이션 가능 플러그인들

보시다시피 applesignin 플로그인은 Null Safety 마이그레이션이 준비가 안되어있는걸 볼 수 있습니다. 이럴경우 플러그인을 변경하거나 직접 migration 풀 리퀘스트를 넣는 방법밖에… 없는걸로 알고있습니다.

최소 Dart 버전 적용하기

pubspec.yaml 에서 Dart SDK 를 아래와 같이 변경해줘야 합니다.

environment:
    sdk: ">=2.12.0 < 3.0.0"
YAML

이렇게 변경 후 pub get 을 실행하면 기존 생성된 프로젝트에 수많은 에러가 나는걸 볼 수 있을거에요 ㅠ. 가이드를 따라 하나씩 수정해나가면 됩니다.

Null Safety 변경사항 소개

@required 는 required 로 변경

기존 material 패키지에서 불러올 수 있었던 @required annotation 은 치명적인 단점이 있었습니다. 필수 요건을 런타임에 체크한다는건데요. 물론 flutter analyze 를 통해서 실행하기 전에 색출해낼 수 있긴 하지만 빌드타임에 에러를 던질 수 있으면 IDE 에서 라이브로 확인도 가능하고 코드변경을 했을때 버그를 찾아내기 훨씬 쉬울 것 같다는 생각을 많이 하셨을거예요. 이제는 @required 대신에 골뱅이가 없는 required 를 사용해서 필수 파라미터가 안들어오면 에러를 던질 수 있습니다.

renderRequiredParameter({
  required String text,
}){
  return Text(text);
}

build(_){
  // 필수값이 없어서 에러!
  return renderRequiredParameter();
}
Dart

Nullable 값

당연히 null 값을 꼭 받아야 할때도 있습니다. 이럴때는 어떻게 할까요? 이럴땐 Typescript 에서 사용하듯이 ‘?’ 를 사용해주면 됩니다

renderNullableParameter({
  String? text,
}){
  if(text == null){
    return Container();
  }else{
    return Text(text);
  }
}
Dart

Nullable 값을 지정할때는 해당 값을 사용할때 꼭 Null 처리를 해주셔야합니다. 그렇지 않으면 자동으로 에러를 던지게 돼요!

결론

이번 Flutter 2.0 업데이트가 진행되면서 기존에 베타 채널에서만 사용이 가능했던 Null Safety 기능이 스테이블 채널에 합류되었습니다. 기존 플러터로 앱을 출시하신 분들은 코드 수정을 거치는데 많은 시간이 들 수도 있지만 결과적으로 많은 버그를 줄일 수 있는 기회가 될것입니다. 업데이트에 맞춰서 급하게 Null Safety 에 대한것만 작성을 해봤는데 앞으로 Flutter 프레임워크 자체에서 바뀐점들도 하나씩 소개해드리도록 하겠습니다!

관련 포스트

플러터에서의 Immutable Programming: copyWith 함수 마스터하기!

플러터에서의 Immutable Programming: copyWith 함수 마스터하기!

서론 불변 프로그래밍: 현대 개발의 핵심 현대 소프트웨어 개발에서 불변 프로그래밍(Immutable Programming)의 중요성은 간과할 수 없는 요소입니다. 플러터(Flutter)에서도 마찬가지로 불변 프로그래밍 개념이 매우 중요하며, copyWith 함수는 이러한 불변성을 유지하는 데 핵심적인 역할을 합니다. 이 글에서는 플러터를 배우기 시작하는 개발자들에게 불변 프로그래밍의 중요성을 강조하고, copyWith 함수의 역할과 사용 방법에 대해 설명 해보겠습니다!...

ChatGPT가 이야기하는 2024년 개발자 로드맵

ChatGPT가 이야기하는 2024년 개발자 로드맵

서론 개발자의 여정을 시작하며 안녕하세요, 미래의 개발자 여러분! 오늘부터 시작하는 여러분의 개발 여정에 함께할 수 있어서 기쁩니다. 2023년은 기술이 매우 빠르게 변화하는 해였으며, 이러한 변화 속에서 개발자가 되기 위한 길은 더욱 다채롭고 흥미로워졌습니다. 이 로드맵은 초보자인 여러분이 개발의 세계에 첫발을 내딛는 데 필요한 기초부터 시작해, 점차 심화 단계로 나아가는 길을 안내해 드릴 것입니다. 백엔드 개발 이 글은 단순히 기술을 배우는 것 이상의 의미를 가집니다....

Flutter Freezed 플러그인! Entity Code Generation은 이거 하나로 끝!

Flutter Freezed 플러그인! Entity Code Generation은 이거 하나로 끝!

https://youtu.be/i5p6wXLAX7I 서론 Flutter 는 Code Generation 기능이 상당히 많이 활성화되어 있어요. 흔히들 많이 사용하는 json_serializable 라이브러리도 있고 retrofit 및 chopper 라이브러리도 있습니다. 오늘 알려드릴 freezed 또한 데이터 클래스에 편의 기능들을 제공해주는 code generation 라이브러리입니다. Freezed vs Json Serializable Code Generation 이라는...