Dart 언어의 null 안전성은 코드의 안정성을 높이고 프로그램에서 예상치 않은 예외를 방지하는 데 도움이 됩니다.
아래의 코드는 null 안전성을 보여주는 예제입니다.
class Person {
String? name;
int age;
Person({this.name, required this.age});
}
void main() {
final person = Person(age: 25);
if (person.name != null) {
print("안녕하세요, ${person.name}님!");
} else {
print("이름이 없어요~");
}
}
위의 코드는 Person객체에서 name 변수를 String? 타입으로 선언하고, 초기값을 null로 설정합니다. 변수 타입선언에 ? 를 사용하면 해당 변수에는 문자열 또는 null 이 모두 할당될 수 있음을 나타냅니다. 그리고 if문을 사용하여 null 안전성을 사용하면 변수에 널 값을 할당하는 실수를 방지할 수 있습니다.
if (person.name != null) {
print("안녕하세요, ${person!.name}님!");
} else {
print("이름이 없어요~");
}
만약 해당 인스턴스나 변수에 대하여 !를 붙이게 될 경우, 해당 인스턴스나 변수가 null이 아니라는 확정을 해 주게 됩니다. 따라서 위와 같이 if 문으로 null 을 확인하지 않을 경우, null 안전성에 대해서 위험한 상황이 올 수 있습니다. 이는 런타임 에러가 발생할 가능성이 생기며, 프로그램이 복잡해질수록 디버깅이 더욱 어려워지는 결과를 초래할 수 있습니다. 아래는 위의 코드 실행 결과로 null 관련 경고를 출력합니다.
Warning: Operand of null-aware operation '!' has type 'Person' which excludes null.
- 'Person' is from 'package:nullable_practice.dart' ('lib/nullable_practice.dart').
print("안녕하세요, ${person!.name}님!");
혹시 모를 null에 대한 한 가지 대비책으로서 ?? 연산자가 있습니다. 아래의 코드를 해석해 보자면, 만약 person.name의 값이 null 일 경우에는 바로 뒤의 ‘테스터’ 라는 값을 할당하라는 의미입니다.
person.name = person.name ?? '테스터';
print(person.name);
또 다른 대비책으로서는 ? 연산자를 사용하는 방법으로서, 아래와 같이 button이 null 이 아닐 경우에 button.text 에 값을 'Confirm'을 할당하도록 하여 null 안전성을 높일 수 있습니다.
var button = querySelector('#confirm');
button?.text = 'Confirm';
'Dart, Flutter for App' 카테고리의 다른 글
Flutter Error | Error (Xcode): expected a ‘=’, but found ? (0) | 2024.01.06 |
---|---|
Dart - operator == , hashCode, & compareTo() (1) | 2023.12.07 |
Dart - final, const, & static (0) | 2023.12.03 |
Dart - Class, Abstract Class, and Interface (0) | 2023.11.29 |
Dart - 369 Game (0) | 2023.11.29 |