Flutter

Dart 문법 - dart null Safety

whs5758 2025. 8. 18. 18:31

dart null Safety란?

널 세이프티는 개발자가 널 에러를 피할 수 있도록 도와주는 다트 프로그래밍 언어의 기능입니다. 이 기능은 사운드 널 세이프티 인 다트(Sound Null Safety in dart)라고 불리며, 이를 통해 개발자는 코드 작성 시점에 널 에러를 잡을 수 있습니다.

Sound Null Safety in dart 란 런타임 중에 null 포인터 예외를 방지하기 위해 Dart 컴파일러가 코드를 분석하고 컴파일할 때 타입 시스템에서 엄격한 규칙을 적용하는 것을 의미합니다.

 

Dart Null Safety의 개념

  • Null Safety는 변수에 null 값을 할당하는 것을 엄격하게 제한합니다.
  • 변수를 nullable 또는 non-null로 선언할 수 있습니다.
  • Non-null 변수는 null 을 가질 수 없으며,  null 변수는 null 만을 가질 수 있습니다. 
  • Null Safety는 Dart 2.12 버전부터 기본으로 활성화되었습니다. 

 

null check 연산자와 null 병합 연산자

  • null check 연산자

Dart 언어에서 null check 연산자(?)는 null 값일 수 있는 객체의 속성이나 메서드에 안전하게 접근하는데 사용됩니다. 이 연산자는 null 참조 오류를 방지하고 코드를 더 견고하게 만듭니다. 

 

  • null 병합 연산자

Dart 언어에서 null 병합 연산자(??)는 null 값 처리에 유용한 연산자입니다. 이 연산자를 사용하면 변수나 표현식의 값이 null인 경우에 대체 값을 지정할 수 있습니다.

 


null 억제 연산자 또는 null assert 연산자

 

Dart 언어에서 !  기호는 null 억제 연산자 또는 null assert 연산자 라고 불립니다. 이 연산자는 nullable 변수나 nullable 표현식을 사용할 때 해당 값이 null 이 아님을 명시적으로 나타내는데 사용됩니다. 

! 연산자를 사용하는 것은 개발자가 해당 값이 null 이 아님을 확신하고, 예외를 발생시키지 않기를 원할 때 유용합니다.

void main() {
  // null 병합 연산자 (null 대체 연산자)
  // 1. null에 안전한 객체의 사용 가능한 속성 접근
  String? maybeName;
  int length = maybeName?.length ?? 0;
  print('length : ${length}');

  // 2. null 에 안전한 객체 메서드 접근
  String? name = getName();

  // 문자열 값을 무조건 소문자로 변형을 하고 싶은 상황
  String resultName = name?.toLowerCase() ?? "LEE".toLowerCase();
  print('resultName : ${resultName}');

  String displayName = name ?? 'Unknown';
  // if(displayName != null) {
  //   print(displayName);
  // }
  print(displayName);

  // null 억제 연산자 또는 null assert 연산자 --> !
  // String? name2 = null;
  String? name2 = '가나다';
  // 강제적으로 null 값이 아니다 라고 명시할 때 사용할 수 있다.
  // 단, null 오류 조심
  String name3 = name2!;
  print(name3);

  /**
   * 변수에 null 값 허용 여부
   * String? name1;
   * String name2;
   *
   * null checkout 연산자
   * name1?.toLowerCase() ?? "HONG"
   */
}

// 함수
// String 데이터 타입이 아니라 String nullable 타입 !!!
String? getName() {
  return null;
}

 

late 키워드

late 키워드는 일반적으로 non-nullable 변수를 나타내는 late 변수를 정의할 때 사용됩니다. late로 선언된 변수는 초기화를 미루고, 변수가 실제로 사용되기 전에 초기화 됩니다.

 

late 키워드를 사용하는 이유

  • 변수를 정의할 때 초기화할 수 있는 시점이나 방법이 없는 경우.
  • 변수를 생성자나 함수에서 나중에 초기화해야 하는 경우.
  • 변수를 사용하기 전에 null 여부를 확인하거나 예외 처리를 할 필요가 없는 경우.
class MyClass {
  late String name;

  MyClass() {
    // late 키워드
    // 서버에서 요청한 값을 받아서 클래스를 만들어야 할 때
    // 통신을 통해 초기값을 받아야 하는 경우 많이 사용한다.
    name = '가나다';
  }
}

 

'Flutter' 카테고리의 다른 글

Dart 문법 - Mixin  (0) 2025.08.18
Dart 문법 - 상속  (1) 2025.08.18
Dart 문법 - 클래스  (2) 2025.08.18
Dart 문법 - 함수  (1) 2025.08.18
Dart 문법 - 조건문  (1) 2025.08.13