Dart는 null-safety를 제공하는 언어로, 개발자가 null로 인한 오류를 방지할 수 있도록 돕습니다. 그러나 기존 코드와의 호환성이나 특정 상황에서 여전히 null을 다루어야 하는 경우가 있습니다.
이번 글에서는 Dart에서 null 체크를 수행하는 다양한 방법과 실용적인 예제를 소개합니다.
1. Dart의 Null-Safety 개념
Dart는 null-safety 기능을 제공하여 해당 변수가 null을 가질 수 있는 변수인지 없는 변수인지를 명확하게 정의해놓을 수 있습니다.
String? nullableString; // null을 가질 수 있는 변수
String nonNullableString = "Hello"; // null을 가질 수 없는 변수
타입 뒤에 ?를 추가해주면 해당 변수에는 null 값이 저장될 수 있습니다. 반대로, 명시적으로 선언된 변수는 null 값을 가질 수 없습니다.
2. Null 체크하는 방법
Dart에서는 null을 체크하는 다양한 방법이 있습니다.
2.1 Null 여부 확인 (if 문 활용)
if 문을 사용하여 null 여부를 검사할 수 있습니다.
void main() {
printLength("안녕하세요"); // 출력: 문자열 길이: 5
printLength(null); // 출력: null 값을 가졌습니다.
}
void printLength(String? text) {
if (text != null) {
print("문자열 길이: ${text.length}");
} else {
print("null 값을 가졌습니다.");
}
}
2.2 Null-aware 연산자 (?.)
?. 연산자를 사용하면 객체가 null이 아닐 때만 속성이나 메서드를 호출합니다.
void main() {
printLength("안녕하세요"); //출력 : 문자열 길이: 5
printLength(null); //출력 : 문자열 길이: null
}
void printLength(String? text) {
print("문자열 길이: ${text?.length}");
}
위 코드에서 text가 null이면 text?.length는 null을 반환하며, 오류 없이 안전하게 실행됩니다.
2.3 기본값 설정 (?? 연산자)
?? 연산자를 사용하면 변수가 null일 경우 기본값을 설정할 수 있습니다.
void main() {
printLength("안녕하세요"); //출력 : 안녕하세요
printLength(null); //출력 : 기본 메시지
}
void printLength(String? text) {
String message = text ?? "기본 메시지";
print(message); // nullableString이 null이면 "기본 메시지" 출력
}
3. Null 체크 실전 예제
3.1 리스트에서 null 값 필터링하기
void main() {
List<String?> names = ["John", null, "Alice", "Bob", null];
List<String> filteredNames =
names.where((name) => name != null).cast<String>().toList();
print(filteredNames); // ["John", "Alice", "Bob"]
}
3.2 맵에서 null 값 제거하기
void main() {
Map<String, String?> userInfo = {
"name": "Alice",
"email": null,
"phone": "123-4567"
};
userInfo.removeWhere((key, value) => value == null);
print(userInfo); // {"name": "Alice", "phone": "123-4567"}
}
4. 정리
Dart에서 null 체크를 수행하는 다양한 방법을 알아보았습니다. null-safe 코드를 작성하면 오류를 방지하고 유지보수를 쉽게 할 수 있습니다. 이제 Dart에서 null을 보다 안전하고 효율적으로 다룰 수 있을 것입니다! 😊