본문 바로가기
취미노트/코딩공부

따라하며 배우는 Flutter 앱 개발입문(2) Null safety, late키워드

by 복습쟁이 2023. 11. 22.
반응형

Null Safety란?

널값으로 유발할 수 있는 개발자의 실수를 방지하기 위한 장치.

Null은 비어있다는 것을 의미. 0과는 다르다. 0은 0이라는 값이 들어가있고, null은 값이 아예 없는것을 의미.

실수로 인해 값을 넣지 않아서 프로그램상 오류가 발생하는 것을 미연에 방지하기 위한 장치들이다.

 

1) 널값 할당 방지

String name = 'hello';
String name2 = null;

예를 들어 name 변수에 hello라는 값을 할당하고, name2라는 변수에 null값을 할당하면 아래와 같이 에러가 뜬다.

 

String? name2 = null;

위 코드처럼 변수타입 뒤에 물음표(String?)를 넣어주면 널값을 변수에 할당할 수 있다.

(=nullable 상태가 된다)

 

2) null값일 때는 print(변수명.length) 쓰면 에러 뜬다.

String? name2 = null;

print(name2.length);

위와 같이 코드를 입력하면 아래와 같은 에러가 발생한다. null값이라 길이를 셀 수 없다는 것이다.

 

 

 

String? name2 = null;

print(name2?.length);

.length 앞에 물음표를 넣어주면, 에러를 발생시키지 않고 null을 출력해준다.

 

 

 

3) 널 합류 연산자란? (??)

String? name3 = null;
String result = name3 ?? 'review';

print(result)

위 코드에서 ??를 빼면 에러가 발생한다. 왜냐? name3가 null값이라서 result가 널세이프티에 걸려서 에러가 뜬다.

하지만 ??를 입력한 뒤, 문자값을 할당을 해 주면 콘솔창에는 'review'가 출력이 된다.

저 코드의 의미가 name3값이 할당되어 있으면 그 값으로 출력, 없으면 ?? 뒤의 값으로 출력하라는 의미이기 때문이다. 

 

String? name3 = 'todays';
String result = name3 ?? 'review';

print(result);

즉, 이렇게 코딩하면 결과값이 todays가 출력이 된다. 

 

 

late 키워드의 활용

late String name;

void main() {
	name = '홍길동'; 
}

값을 할당하다 = 초기화하다.

첫번째 줄 name이라는 변수는 초기화가 되어있지 않은 상태이다.

4번째 줄 name변수에 '홍길동'이라는 값이 할당된다. 특정 시점에 값을 할당할 수 있는 것이다.

즉, 시작값은 초기화되지 않았으나 원하는 시점에 늦은 초기화가 가능한 것이다. 

널세이프티를 활용하여 해당 기능 구현이 가능하지만, 개발자가 late를 활용해 명시적으로 늦은초기화 가능.

 

728x90
반응형

댓글