[다트] Null-aware 연산자

다트에서 Null

다트 언어에서는 모든 것이 객체이며 모든 객체는 null이 될 수 있다. 즉, 모든 변수가 null 값을 가질 수 있다.

다트는 모든 변수의 값이 null일 경우를 대비하여 null-aware 연산자를 제공한다.


Null-aware 연산자

Null-aware 연산자는 객체가 null이면 해당 객체에 대한 메서드 수행이나 프로퍼티 접근이 일어날 경우 발생 가능한 null 예외를 발생하지 않도록 해준다. 해당 객체에 대한 표현식 자체가 null로 평가되도록 한다.

Null-aware 연산자에는 ?. 연산자, ?? 연산자, ??= 연산자 세 종류가 존재한다.


?. 연산자

Null-aware 연산자를 사용하지 않을 경우 객체의 null 확인을 위해서는 if(객체 != null)와 같은 null 확인 코드가 필요하다. ?. 연산자를 사용하면 해당 객체가 null이 아니면 객체의 프로퍼티에 접근하고, null이면 예외를 발생시키는 대신 표현식을 null으로 평가한다. ?. 연산자를 사용하는 것을 조건부 프로퍼티 접근이라고도 한다.

객체?.프로퍼티에서 객체가 null이 아니면 해당 객체의 프로퍼티의 값을 반환하고, null이면 null을 반환한다. 객체?.프로퍼티(객체 != null) ? 객체.프로퍼티 : null 코드와 동일하다.

메서드 체이닝(method chaining) 형식의 코드에서도 모든 프로퍼티나 메서드에 대해 ?. 연산자를 사용할 필요 없이 첫 번째 객체(리시버)에 대해서만 연산자를 사용하면 된다.


?? 연산자

?? 연산자를 사용하면 객체에 값이 있는지, 아니면 null인지 알 수 없을 경우 null일 수 있는 객체에 대해 표현식을 특정값으로 평가한다. 표현식1 ?? 표현식2에서 표현식1null이 아니면 왼쪽의 표현식1을 평가하여 그대로 반환하고, null이면 오른쪽의 표현식2을 평가하여 반환한다.


??= 연산자

??= 연산자를 사용하면 객체가 null일 경우 해당 객체에 특정 값을 할당할 수 있다. 객체 ??= 표현식에서 객체가 null이면 해당 객체에 표현식을 평가하여 할당한다.


참고

Comments