Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- delayed
- 해석
- 라이브러리
- pubspec.yaml
- get과 post
- javascript
- 독도갈매기
- 인사글
- 취준생?!
- listtile
- 욕 필터링
- 주석 추가
- 책 정보
- IT특성화 학생
- flutter
- 리스트 아이템
- 비동기
- flutter 2.0
- null-safety
- Node js
- text overflow
- null_safety
- 기본코드
- async
- pub.dev
- Future
- liquid_swipe
- 기본 개념
- 글자 변경
- await
Archives
- Today
- Total
This is unimportant
Flutter Null Safety 본문
Null Safety
Null Safety
Flutter 2.0부터 null safety를 지원합니다.
개발되는 코드가 null 안정성을 보장한 상태로 개발되게 하고자 하는 개념
?
Nullable과 Non-Nullable을 구분해서 사용할 수 있게 해준다.
기본적으로 변수를 선언할 때 Non-Nullable(null값 허용 X)
로 선언되지만 처음 변수를 선언할 때 변수 타입 앞에 ?
를 붙이면 Nullable(null값 허용)
로 선언된다.
Kotlin을 보는 것 같은 느낌?
String str1 = 'Null 테스트';
String? str2 = 'Null 테스트';
str1 = null; // error 발생
str2 = null;
// 클래스의 경우도 똑같음
Class TestClass {}
TestClass test1 = null; // error 발생
TestClass? test2 = null;
//Non-Nullable 변수는 선언과 동시에 초기값을 주어야 한다.
int a; // error 발생 -> int a = 0;(error 발생 X)
int? b;
//Non-Nullable 변수에 Nullable값을 담는 건 불가능하지만
//Nullable 변수에 Non-Nullable값을 넣는 건 가능
int c = 100;
int? d = 100;
c = d; // error 발생
d = c;
var일 경우
var는 타입 유추이다. 변수에 넘는 값에 따라 타입이 결정되며 Nullable과 Non-Nullable도 자동 유추가 된다.
따라서 var
타입 뒤에는 ?를 붙일 필요가 없다.
var a = 10; // int, Non-Nullable
var b = null; // Nullable
var c; // Nullable
var? d = 4; // error 발생
dynamic일 경우
dynamic은 값을 한정하지 않고 모든 타입의 데이터가 대입될 수 있다(Nullable도 포함).
따라서 dynamic
타입일 경우 ?를 써도 되고 안 써도 된다.
// 모두 가능
dynamic a = 10;
dynamic b = null;
dynamic c;
a = null;
b = 10;
c = null;
!
변수 뒤에 붙이며 그 변수의 값이 null일 경우
runtime error(프로그램 실행 중 발생한 오류)를 발생
int? a = 10;
a!; // error X
a = null; // a값을 null로 변경
a!; // error 발생
late
Non-Nullable로 변수를 선언하려면 초기값을 주어야 하지만 late
를 사용해서 늦게 값을 지정해줄 수 있다.
String str1; // error 발생
late String str2;
print(str2); // error 발생
str2 = 'Hello World';
print(str2); // Hello World 출력
기타
Null-aware operators
변수의 값이 null일 경우
에만 변수에 값을 넣어준다.
int? a;
a ??= 3;
print(a); // 3 출력
// a의 값이 null이 아닌 3이기 때문에 값을 넣어주지 않음
a ??= 5;
print(a); // 3 출력
// ??를 이용하여 표현식의 값이 null일 경우 좌우에 표현식 중 왼쪽에 표현식을 반환하고
// 아닐 경우 오른쪽에 표현식을 반환
int b?;
b = 1 ?? 3;
print(b); // 1 출력
// b의 값이 null이 아닌 1이기 때문에 오른쪽 표현식 반환
b = 10 ?? 11;
print(b); // 11 출력
Conditional property access
null 일 수도 있는 객체의 속성 또는 메소드일 경우 점(.) 앞에 ?
를 넣어준다.
myObject?.someProperty;
// 위에 코드는 아래와 같다.
//null이 아닌 경우는 그대로 실행 하지만 null일 경우 null을 반환
(myObject != null) ? myObject.someProperty : null;
참고 : https://kkangsnote.tistory.com/98
https://dart.dev/codelabs/dart-cheatsheet
'Flutter' 카테고리의 다른 글
Flutter http 통신(JSON) (0) | 2021.06.02 |
---|---|
Flutter Future, async, await 심화 (0) | 2021.04.17 |
Flutter Future, async, await (0) | 2021.04.16 |
Flutter 길이가 넘는 글자 변경 (0) | 2021.04.04 |
Flutter Splash screen (0) | 2021.03.31 |
Comments