반응형

Flutter(플러터)의 null safety / !와 ?는 왜 쓰고 어떻게 쓰는걸까?

 

 

플러터를 처음 시작할 때 기존에 사용하던 자바스크립트, 자바, c#과 달라 가장 이질적이었던 건 바로 변수 뒤에 붙는 !와 ?였다.

인터넷 강의에서는

변수 선언 시에 변수 뒤에 ? 를 붙여주어 NULL일 수도 있다는 것을 나타내고, !를 붙이면 값이 무조건 있다고 생각한다.

정도로만 이해를 하고 사용하고 있었지만, 정확하게 정리를 해놓고자 한다.

 

🐶 Flutter 2.0 ( Null Safety )

2021년 3월에 플러터가 2.0으로 업데이트되며 Null Safety 가 적용되었습니다. Null safety는 말 그대로 'Null로부터 안전하다' 입니다. 개발에 손을 대 보신 분들이라면 잘 돌아가던 프로그램이 하나의 Null로 인해 수많은 에러가 일어나고 결국 프로그램이 종료되는 경험을 많이 겪어보셨을겁니다. 이런 것들은 우리가 변수에 값을 제대로 할당하지 않고 그 값에 접근하려고 할 때 발생하는데요. 의외로 이런 일은 실무에서도 굉장히 자주 일어납니다. 컴퓨터는 코드대로만 움직이기때문에 불완전한 코드를 짠 우리, human error(인간에 의한 사고) 로 볼 수 있습니다. 하지만 우리가 완벽하게 모든 상황에서 Null을 배제하기란 꽤나 어렵기 때문에 Null Safety가 나오게 된 것이라고 생각합니다.

Null 에러가 나는 과정.

Flutter 2.0부터 도입된 Null Safety는 이를 원천 차단하고자 합니다. Null이 발생할 것 같은 코드에 미리 에러를 띄워 Null이 발생하지 않도록 예외처리를 강제합니다. 예시를 한 번 보도록 할게요.

 

String name이라는 변수를 선언했는데 값을 주지 않았습니다. 현재 null상태라는 거죠. 그러면 위처럼 에러를 띄워줍니다.

플러터에서 기본적으로 모든 변수는 'non nullable'입니다. null값을 가지지 않는다는거죠.

하지만 우리는 개발의 편의성을 위해 null 값을 가지는 변수를 지정할 수 있습니다. 이를 'nullable' 이라고 하는데요. 변수의 타입 뒤에 '?' 를 씁니다.

 

쨘! ?를 붙였더니 에러가 사라졌다!!

자 그렇다면 ?만 붙이면 모든 문제가 해결되냐, 그건 또 아닙니다.

처음 선언하는 부분에서는 ?를 붙여서 에러가 뜨지 않도록 설정했지만 플러터는 아직 이녀석이 null일 수 있다는 것을 알고있습니다.

실제로 저 변수를 사용하는 시점에서 null값이 뜨면 결국 어플리케이션은 에러가 발생하며 멈추게되죠.

그래서 플러터는 저 nullable변수가 사용될 때마다 해당 내용을 다시 체크합니다. 

 

그럼 저렇게 에러가 떴을 때는 어떻게 해야하냐, 하면 변수 뒤에 '!' 을 붙여주면 됩니다.

그러면 플러터는 '아 저 변수는 사용되는 시점에서 null값이 절대 아니구나' 하고 에러를 없애줍니다.

바로 아래처럼요!

 

!을 붙이니 에러가 사라졌다.

실무에서 테스트를 할 때 null exception으로 하도 고통받다보니 이 null satety가 얼마나 좋은 건지 확 체감이 되었습니다. 물론 불편한 점도 많겠지만 멀리 테스트까지 생각했을 때는 훨..씬.. 나을거라는거! 자동으로 null까지 체크해주는 기계님에게 감사를 표하십시오 휴먼 :)

반응형

'개발 > Flutter' 카테고리의 다른 글

Flutter로 크로스플랫폼 앱개발 시작합니다.  (8) 2022.06.27
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기