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

2024. 10. 31. 14:31·Category/Dart
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일 경우 기본값을 제공하여 안정적인 값을 반환합니다.
728x90

'Category > Dart' 카테고리의 다른 글

Dart 언어에서 비동기 프로그래밍을 할 때 사용하는 Future 객체 알아보기  (2) 2024.09.28
factory 키워드 - Dart 언어에서 팩토리 생성자 정의하기  (1) 2024.09.28
'Category/Dart' 카테고리의 다른 글
  • Dart 언어에서 비동기 프로그래밍을 할 때 사용하는 Future 객체 알아보기
  • factory 키워드 - Dart 언어에서 팩토리 생성자 정의하기
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (361) N
      • Category (354)
        • Algorithm (7)
        • SQL (2)
        • Java (4)
        • C (9)
        • React (7)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26)
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (22)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
        • 사이드 프로젝트 (1)
        • Note (80)
        • Socket (1)
        • 개인 정보 처리 방침 (1)
        • 면접 (0)
        • Vue.js (0)
      • Archive (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    intellij 콘솔 한글 깨짐
    chrome extension 자동 배포
    stdlib.h
    jackson 라이브러리
    counter
    styled-components
    react router
    react
    inp
    math.h
    쉽게 풀어쓴 C언어 Express
    소프트웨어 버전 관리
    원시값(primitive)
    core web vitals
    ajax (asynchronous javascript and xml)
    public vs assets
    named export vs default export
    json.parse(json.stringify())
    defaultdict
    useEffect
    x.y.z (메이저.마이너.패치)
    Jest
    structuredclone()
    프로세스 강제 종료
    semver)
    mermaid-cli
    시맨틱 버전(semantic versioning
    중첩 함수(nested function)
    mcp server
    Collections
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
Dart - 널 안전성을 다루기 위한 연산자 ?.와 ??
상단으로

티스토리툴바