널 인식 연산자
Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 27번째.
?. 및 ! 외에도, Dart는 null 허용 값을 더 간결하게 다룰 수 있도록 하는 추가 연산자들을 제공합니다. 이러한 null 인식 연산자는 잠재적인 null 값을 처리할 때 더 깔끔한 코드를 작성하는 데 도움이 됩니다.
널 병합 연산자 ??는 왼쪽 값이 null이 아니면 왼쪽 값을 반환하고, 그렇지 않으면 오른쪽 값을 반환합니다:
String? nickname;
String displayName = nickname ?? 'Guest';
print(displayName); // Guest
nickname = 'Alex';
displayName = nickname ?? 'Guest';
print(displayName); // Alexnull 인식 할당 연산자 ??=는 변수가 현재 null인 경우에만 값을 할당합니다:
String? username;
username ??= 'Anonymous';
print(username); // Anonymous
username ??= 'NewName';
print(username); // 여전히 Anonymous (null이 아니었음)중첩된 속성에 대해 null-aware access 연산자 ?.를 연쇄적으로 사용할 수 있습니다:
String? city = user?.address?.city; // user나 address가 null인 경우에도 안전합니다이 연산자들은 서로 잘 조합됩니다. 예를 들어, null 허용 속성에 접근하면서 기본값을 제공할 수 있습니다:
String greeting = user?.name ?? 'Stranger';
// user가 null이거나 user.name이 null인 경우, 'Stranger'를 사용합니다이러한 연산자를 사용하면 프로그램 전반에 걸쳐 null 안전성을 유지하면서 코드의 가독성을 유지할 수 있습니다.
챌린지
쉬움선택적 정보를 처리할 때 null-aware 연산자가 코드를 얼마나 깔끔하게 만들어 주는지 보여주는 게스트 등록 시스템을 만들어 보겠습니다.
코드는 두 개의 파일로 구성됩니다:
guest.dart: 이벤트에 참석하는 사람을 나타내는Guest클래스를 정의합니다. 어떤 게스트는 상세 정보를 제공하지만, 어떤 게스트는 기본 정보만 제공합니다. 클래스에는 다음이 포함되어야 합니다:- null을 허용하지 않는
String name- 모든 게스트는 반드시 이름을 가져야 합니다. - null을 허용하는
String? email- 모든 사람이 이메일을 제공하는 것은 아닙니다. - null을 허용하는
String? dietaryPreference- 일부 게스트는 식단 요구 사항을 지정하지 않습니다. name을 필수 매개변수로 받는 생성자??연산자를 사용하여 이메일이 있으면 이메일을 반환하고, 없으면'No email provided'를 반환하는getDisplayEmail()메서드??=연산자를 사용하여dietaryPreference가 현재 null인 경우에만'Standard'로 설정하는assignDefaultDiet()메서드?.를 사용하여 이메일의 길이를 반환하거나, 이메일이 없으면null을 반환하는getEmailDomain()메서드- 게스트의 배지 정보를 출력하는
printBadge()메서드
- null을 허용하지 않는
main.dart: 게스트 클래스를 가져와서 서로 다른 수준의 정보를 가진 세 명의 게스트를 등록합니다:- 이름이
'Alice'인 게스트를 생성하고, 이메일을'alice@company.com'으로, 식단 선호도를'Vegetarian'으로 설정합니다. - 이름이
'Bob'인 게스트를 생성하고, 이메일만'bob@email.org'로 설정합니다 (식단 선호도는 null로 둡니다). - 이름이
'Charlie'인 게스트를 생성합니다 (이메일과 식단 선호도 모두 null로 둡니다). - 세 명의 게스트 모두에게
assignDefaultDiet()를 호출합니다. - 각 게스트에 대해 순서대로
printBadge()를 호출한 다음,getEmailDomain()을 사용하여Email length: [result]를 출력합니다.
- 이름이
printBadge() 메서드는 다음 형식으로 출력해야 합니다:
=== Guest Badge ===
Name: [name]
Email: [getDisplayEmail()]
Diet: [dietaryPreference or "Not specified"]??=는 값이 null일 때만 할당하기 때문에 Alice의 식단 선호도는 'Vegetarian'으로 유지되는 반면, Bob과 Charlie는 기본값인 'Standard' 식단이 할당되는 것을 확인해 보세요.
예상 출력 결과:
=== Guest Badge ===
Name: Alice
Email: alice@company.com
Diet: Vegetarian
Email length: 17
=== Guest Badge ===
Name: Bob
Email: bob@email.org
Diet: Standard
Email length: 13
=== Guest Badge ===
Name: Charlie
Email: No email provided
Diet: Standard
Email length: null치트 시트
Dart는 nullable 값을 더 간결하게 처리할 수 있도록 null 인식 연산자(null-aware operators)를 제공합니다.
null 병합 연산자(null-coalescing operator) ??는 왼쪽 값이 null이 아니면 왼쪽 값을 반환하고, 그렇지 않으면 오른쪽 값을 반환합니다:
String? nickname;
String displayName = nickname ?? 'Guest';
print(displayName); // Guest
nickname = 'Alex';
displayName = nickname ?? 'Guest';
print(displayName); // Alexnull 인식 할당 연산자(null-aware assignment operator) ??=는 변수가 현재 null인 경우에만 값을 할당합니다:
String? username;
username ??= 'Anonymous';
print(username); // Anonymous
username ??= 'NewName';
print(username); // Still Anonymous (wasn't null)중첩된 속성에 대해 null 인식 액세스 연산자 ?.를 체이닝할 수 있습니다:
String? city = user?.address?.city; // user나 address가 null이어도 안전함이 연산자들은 함께 조합하여 사용할 수 있습니다:
String greeting = user?.name ?? 'Stranger';
// user가 null이거나 user.name이 null이면 'Stranger'를 사용함직접 해보기
import 'guest.dart';
void main() {
// TODO: 'Alice'라는 이름의 게스트를 생성하세요
// 이메일을 'alice@company.com'으로 설정하세요
// 식단 선호도를 'Vegetarian'으로 설정하세요
// TODO: 'Bob'이라는 이름의 게스트를 생성하세요
// 이메일만 'bob@email.org'로 설정하세요
// 식단 선호도는 null로 남겨두세요
// TODO: 'Charlie'라는 이름의 게스트를 생성하세요
// 이메일과 식단 선호도 모두 null로 남겨두세요
// TODO: 세 명의 게스트 모두에게 assignDefaultDiet()를 호출하세요
// TODO: 각 게스트에 대해 순서대로 ('Alice', 'Bob', 'Charlie'):
// - printBadge()를 호출하세요
// - getEmailDomain()을 사용하여 'Email length: [result]'를 출력하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.