2023 새해가 밝았다. Happy New Year!

새해 첫 포스팅이다😀

Flutter in Action 책을 보며 공부중인데

예제가 너무 예전 버전의 Flutter로 제작되어 있어

빨간줄을 일일히 처리하던 중 굉장히 많이 하던 작업…


?는 왜 붙이는건데?

이걸 알려면 먼저 Dart의 Sound null safety부터 이해해야 한다.

아래는 Dart 공식 홈페이지 설명을 내 식대로 풀어본 것이다.

Null safety는 변수가 의도하지 않았을때 null이 되어 발생하는 에러를 방지한다. 예를 들어, 만약 메소드가 int 타입을 기대했는데 null을 받았다면, 앱은 runtime 에러를 발생시키게 된다. 이러한 타입의 에러는 디버그 하기가 어렵다.

위와 같은 이유로, dart는 Nullable(null이 될 수 있는)과 Non-nullable(null이 될 수 없는) 타입을 구분하기로 했다! 만약 어떤 이유로 변수가 null 값을 가질 수 있게 하려면 물음표 마크(?)를 타입 이름 뒤에 붙여주기만 하면 된다. 예를 들어 String? 이란 타입의 변수는 문자열을 가지거나 혹은 null이 될 수 있다!


그러면… ?.는 왜 붙이라는건데?

User user = User.fromResponse(response);
 if (user != null) {
  this.userAge = user.age;
}

위와 같이 많이들 작성하는데 null 인지 연산자(?.)를 사용하면

다음과 같이 변경할 수 있다.

User user = User.fromResponse(response);
this.userAge = user?.age;

‘user 객체가 null이 아니면 user.age를 userAge에 할당하고

null이면 오류를 발생시키지 말고 null을 할당하시오’ 라는 의미다.

즉, ?가 붙은 nullable 타입인데 값이 null인지 아닌지 모르겠다?

그러면 ?.를 사용해서 Exception으로부터 안전하게 하자.


Dart Null safety codelab 의 보너스 팁!

?.을 사용해 메소드를 실행시키면?

// nullableObject가 null이 아닌 경우에만 action 메소드를 실행하게 된다!
nullableObject?.action();

codelab 설명도 쉽게 되어 있고 따라해 볼 수 있는 예제가 있어 넘 좋다💙