널일 수 있는 타입 파라미터에 널 검사 연산자 쓰기

널일 수 있는 타입 파라미터에 널 검사 연산자 쓰기

null_check_on_nullable_type_parameter 진단은 널일 수 있는 타입 파라미터 타입의 변수에 널 검사 연산자(!)를 썼을 때 분석기가 알려 주는 메시지예요. 제네릭을 다루다 보면 은근히 잘못 넣기 쉬운 검사라서, 언제 틀릴 수 있는지 짚어 드릴게요.

출처: null_check_on_nullable_type_parameter

본문

설명 (Description)

분석기는 타입이 T?인 변수에 널 검사 연산자를 사용했을 때 이 진단을 만들어 내요. 여기서 T는 타입 인자가 널일 수 있도록 허용된 타입 파라미터예요(경계(bound)가 없거나, 널일 수 있는 경계를 가진 경우).

널일 수 있는 경계를 가진 제네릭 타입 파라미터 T가 있으면, T? 타입의 변수를 다룰 때 잘못된 널 검사를 넣기가 아주 쉬워요. 특히 T? x; 같은 변수를 두고 "이제 xT 타입의 유효한 값이 들어갔는지 확인하고 싶다"고 할 때죠. 여기서 흔히 x!를 쓰는 실수를 하곤 하는데, 이건 거의 언제나 틀려요. 만약 T가 널 타입이라면 xT 타입의 값으로서 null을 정당하게 담고 있을 수 있으니까요.

예시 (Example)

아래 코드는 tT? 타입이고 T가 널 타입 인자를 허용하기 때문에(extends 절이 없어서) 이 진단이 발생해요.

T f<T>(T? t) => t!;

흔한 해결책 (Common fixes)

타입 파라미터를 이용해 변수를 캐스팅하면 돼요.

T f<T>(T? t) => t as T;

더 알아보기