본문 바로가기
Category/Dart

Dart - 널 안전성을 다루기 위한 연산자 ?.와 ??

by Corinee 2024. 10. 31.
728x90
반응형

Dart에서 ?.와 ??는 널 안전성을 다루기 위해 사용하는 연산자입니다. 각 연산자의 역할과 사용 예시는 다음과 같습니다:

1. ?. 연산자 (널-세이프 접근 연산자)

  • 기능: 객체가 null인지 확인하고, null이 아닐 때만 접근합니다.
  • 사용 목적: 객체가 null일 가능성이 있을 때, null 에러를 방지하고 안전하게 접근하기 위해 사용합니다.

예제:

String? name;
print(name?.length); // name이 null이면 null을 반환, null이 아니면 length를 반환

위 예제에서 name이 null일 경우, name?.length는 null을 반환하며 오류 없이 코드가 실행됩니다.

2. ?? 연산자 (널 병합 연산자)

  • 기능: 왼쪽 값이 null이면 오른쪽 값을 반환하고, null이 아니면 왼쪽 값을 반환합니다.
  • 사용 목적: 변수나 값이 null일 때 대체할 기본값을 제공하기 위해 사용합니다.

예제:

String? username;
String displayName = username ?? "Guest";
print(displayName); // username이 null이면 "Guest"가 출력됨

여기서 username이 null이면 "Guest"가 displayName에 할당됩니다. username이 null이 아니면 username의 값이 사용됩니다.

?.와 ??를 함께 사용하는 예제

이 두 연산자는 함께 사용할 수 있습니다. 예를 들어, 객체 속성에 안전하게 접근하고, null일 경우 기본값을 제공하려면 아래와 같이 작성할 수 있습니다:

class User {
  String? name;
}

void main() {
  User? user;
  print(user?.name ?? "Unknown"); // user 또는 user.name이 null일 경우 "Unknown"을 출력
}

여기서 user가 null이면 user?.name도 null을 반환하고, ?? 연산자를 통해 "Unknown"이 출력됩니다.

요약

  • ?.는 객체가 null이 아닐 때만 접근하도록 하여 null 에러를 방지합니다.
  • ??는 null일 경우 기본값을 제공하여 안정적인 값을 반환합니다.