다트의 null-aware 연산자란 무엇인가요?
_____A1: null-aware 연산자는 다트 언어에서 값이 null인지 안전하게 검사하고 처리하기 위해 제공되는 특별한 연산자입니다. 이 연산자들은 null 참조로 인한 오류를 방지하고, 코드의 가독성과 안정성을 높여줍니다.
Q2: 다트에서 사용되는 주요 null-aware 연산자는 어떤 것들이 있나요?
A2: 주요 null-aware 연산자는 다음과 같습니다.
- `?.` (null-aware 접근 연산자)
- `??` (null 병합 연산자)
- `??=` (null 병합 할당 연산자)
- `...?` (null-aware 스프레드 연산자)
- `!` (null 단언 연산자)
Q3: 각각의 null-aware 연산자는 어떻게 동작하나요?
A3:
- `?.` : 객체가 null이 아닐 때만 해당 객체의 멤버를 접근합니다. 예: `a?.b`는 a가 null이면 null을 반환, 아니면 a.b를 반환합니다.
- `??` : 좌측 피연산자가 null이면 우측 피연산자를 반환합니다. 예: `a ?? b`는 a가 null일 때 b를 반환.
- `??=` : 변수에 값이 null일 경우에만 우측 값을 할당합니다. 예: `a ??= b`는 a가 null일 때만 b를 a에 할당.
- `...?` : 리스트나 맵 등 컬렉션을 펼칠 때 null인 경우 무시합니다. 예: `[1, 2, ...?nullableList]`
- `!` : 변수 등이 null이 아님을 강제로 단언할 때 사용, null이 맞으면 실행 중 오류 발생. 예: `a!`
Q4: null-aware 연산자를 사용하는 이유는 무엇인가요?
A4: null 처리를 보다 간결하고 안전하게 하기 위해서입니다. null 체크 코드를 간략화하고 null 참조로 인한 실행 오류를 예방합니다.
Q5: 예제로 null-aware 연산자의 사용법을 알려주세요.
A5:
```dart
// ?. 사용: name이 null이 아니면 length를, 아니면 null 반환
int? length = name?.length;
// ?? 사용: name이 null이면 'Guest'를 사용
String displayName = name ?? 'Guest';
// ??= 사용: name이 null이면 'Unknown' 할당
name ??= 'Unknown';
// ...? 사용: nullableList가 null이면 무시하고 펴기
List
var list = [1, 2, ...?nullableList];
// ! 사용: null이 아니라고 단언하여 강제 접근
int forcedLength = name!.length; // name이 null이면 런타임 오류
```
Q6: null-aware 연산자를 사용할 때 주의할 점은?
A6:
- `!` 연산자는 null 여부를 강제로 무시하므로 null일 경우 런타임 오류가 발생하니 반드시 null이 아님을 확신할 때만 사용해야 합니다.
- `??`, `??=`, `?.` 등은 null 가능 타입과 함께 적절히 사용해야 하며, 불필요한 null 체크나 과도한 사용은 오히려 코드 가독성을 해칠 수 있습니다.
Q7: null-aware 연산자는 다트 null 안전성(null safety)와 관련이 있나요?
A7: 네. null-aware 연산자는 다트의 null safety 기능을 보완하고 개선하기 위해 도입되었으며, null을 명시적으로 처리함으로써 컴파일 시점에 오류를 줄이고 안정적인 코드를 작성할 수 있도록 돕습니다.
작성자:
이현우 [비회원]
| 작성일자: 1년 전
2024-09-19 01:52:40
조회수: 122 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 122 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.