Dart 언어 오답노트 : 6. null safety

샤워실의 바보·2023년 10월 24일
0
post-thumbnail

Dart에서 null safety는 null을 처리할 때 발생할 수 있는 오류를 방지하고 코드의 안정성을 높이는 기능입니다. Dart 2.12 이후부터는 모든 변수가 기본적으로 non-nullable이 되며, null 값을 가질 수 있도록 하려면 타입 뒤에 ?를 붙여야 합니다. 여기에는 몇 가지 연산자와 패턴이 있어서 안전한 null 처리를 돕습니다.

? (Nullable Type Modifier)

타입 뒤에 ?를 붙이면 해당 변수가 null 값을 가질 수 있음을 나타냅니다.

String? nullableString; // null을 가질 수 있는 문자열
nullableString = null; // 유효함

! (Null Assertion Operator)

변수 뒤에 !를 붙이면 해당 변수가 null이 아니라고 Dart 컴파일러에게 명시적으로 알려줍니다. 만약 변수가 null일 경우, 런타임 에러가 발생합니다.

String? nullableString;
String nonNullableString = nullableString!; 
// nullableString이 null이면 런타임 에러

?. (Conditional Access Operator)

?. 연산자를 사용하면 객체가 null이 아닐 때만 프로퍼티나 메서드에 접근할 수 있습니다. 만약 객체가 null이라면, 표현식 전체가 null을 반환합니다.

String? nullableString;
int? length = nullableString?.length; 
// nullableString이 null이면 length는 null이 됩니다.

?? (Null Coalescing Operator)

?? 연산자를 사용하면 왼쪽의 표현식이 null이 아니면 그 값을, null이면 오른쪽의 값을 반환합니다.

String? nullableString;
String nonNullableString = nullableString ?? "default value"; 
// nullableString이 null이면 "default value" 반환

??= (Null Coalescing Assignment Operator)

??= 연산자는 변수가 null일 때만 값을 할당합니다.

String? nullableString;
nullableString ??= "default value"; 
// nullableString이 null이면 "default value"를 할당

이러한 연산자들은 Dart에서 null을 더 안전하고 편리하게 처리할 수 있게 도와줍니다. 그러나 항상 주의 깊게 사용하고, null이 될 수 있는 변수를 다룰 때는 해당 변수가 null인지 항상 확인하는 습관을 들이는 것이 중요합니다.

! (null assertion operator)는 변수가 null이 아니라고 Dart 컴파일러에게 명시적으로 알려주는 역할을 합니다. 이 연산자를 사용할 때는 해당 변수가 실행 시점에 확실히 null이 아니라는 것을 개발자가 확신하고 있어야 합니다.

!을 사용하나요?

  1. Non-nullable 변수와의 상호 작용: Dart에서 null safety를 활성화하면 모든 변수는 기본적으로 non-nullable이 됩니다. 만약 nullable 변수의 값을 non-nullable 변수에 할당하려면, 해당 값이 null이 아니라는 것을 명시적으로 알려줘야 합니다.

    String? nullableString = "I am not null";
    String nonNullableString = nullableString!; 
    // 'nullableString'이 null이 아니라고 확신할 때 사용
  2. null 검사 후 사용: 변수가 null이 아니라고 확인한 후에 그 값을 사용하려 할 때 ! 연산자를 사용할 수 있습니다.

    String? nullableString = "I am not null";
    if (nullableString != null) {
      String nonNullableString = nullableString!; 
      // null 검사 후 사용
    }
  3. 특정 상황에서의 성능 최적화: ! 연산자를 사용하면 null 검사를 건너뛰고 값을 직접 사용할 수 있기 때문에, 성능에 민감한 상황에서 성능을 조금이라도 끌어올릴 수 있습니다.

주의사항

! 연산자는 매우 강력하지만, 잘못 사용하면 런타임 에러를 일으킬 수 있습니다. 변수가 실행 시점에 확실히 null이 아니라는 것을 확신할 수 없다면, ! 대신 다른 null safety 기능(예: ??, ?., null 검사 등)을 사용하는 것이 더 안전합니다.

결론적으로, ! 연산자는 코드의 안전성을 유지하면서 null 처리를 간결하게 만들어주지만, 사용 시에는 주의가 필요합니다.

profile
공부하는 개발자

0개의 댓글