말랑말랑제리스타일

플러터에서 초기화 하지 않고 변수 선언하는 방법 본문

프로그래밍/플러터 앱개발

플러터에서 초기화 하지 않고 변수 선언하는 방법

제리제리 2022. 10. 28. 12:54

플러터에서 변수를 생성하고 초기화하지 않으면 빨간 줄이 보이면서 에러가 나는데요.

예전 버전에서는 이런 에러가 없었는데 플러터 2.0으로 업그레이드가 되면서 생긴 에러입니다.

플러터 초기화하지 않을 시 발생하는 에러 화면입니다.
플러터 초기화 에러

빨간 줄 위에 마우스를 올리면 보이는 에러 메시지는 아래와 같죠.

"Non-nullable instance field 'controller' must be initialized"

런타임 에러를 컴파일에서 사전에 막아주기 위한 정책이 아닐까 싶습니다.

 

여하튼 그럼에도 불구하고 우리는 종종 변수 선언부터 해놓고 초기화를 해야 될 경우가 종종 발생합니다.

플러터에서 변수 선언만 하고 초기화는 이후에 하는 방법

반응형

하지만 불가능이란 없고 플러터를 개발하는 사람들도 직원이기 이전에 개발자죠. 변수 선언부와 초기화하는 부분이 따로 필요한 경우가 상당히 많습니다.

그렇기 때문에 우리에게는 탈출구가 있습니다.

late를 사용하거나 물음표를 사용하는 건데요.

 

빨간 줄이 뜬 변수의 플러터 변수 타입 앞에 late를 붙여주면 해당 에러가 사라집니다.

저 같은 경우 "late Tab Controller controller;"로 해당 라인을 수정해줄 수 있겠죠.

단어 뜻 그대로 뒤쪽에서 초기화를 해주겠다는 뜻입니다.

 

다른 방법으로는 플러터 변수 타입 뒤에 물음표를 붙여서 초기화를 뒤로 미루는 건데요.

변수 선언부에서 아래와 같이 플러터의 변수 타입 뒤에 물음표를 붙여주면 에러가 사라집니다.
"TabController? controller;"

 

그럼 late와 물음표의 차이는 뭘까요?

플러터에서 late와 물음표의 차이점

반응형

플러터 2.0에서 기본적으로 변수 선언을 하면 모든 변수는 Not Null 변수가 됩니다. 앞서 말한 Null 값으로 인한 문제를 사전에 해결하기 위함이겠죠. 

그런데 변수 선언만 하고 초기화를 하지 않으면 이 변수는 초기화가 될 때까지 null 상태로 남아있습니다.

 

여기서 물음표를 붙여서 변수를 선언한다는 것 이 변수에 대해서는 null을 허용한다는 의미입니다.

다시 말해 null이면 null인대로 사용 가능하다는 거죠. 다만 null을 어떻게 사용하는지에 따라서 발생 가능한 에러는 개발자가 책임져야겠죠.

 

두 번째로 late를 붙여서 변수를 선언한다는 건 Not null 변수로 선언을 하지만 이후에 초기화를 해줘야 한다는 뜻이죠.

따라서 late를 붙여서 변수를 선언하는 경우 Null 값을 최초 한 번만 허용하는 반면 물음표를 붙여서 선언한 변수는 몇 번이고 null이 들어갈 수 있는 값이 된다는 차이가 있습니다.

Comments