최근 코틀린을 처음 사용하는 나날들을 보내면서, 우당탕탕 코틀린을 익혀나가고 있습니다!😅
얼마 전, 외부 API의 응답을 받아오기 위해 작성한 코드에서 아래와 같은 경고를 만났었습니다.
data class Response(
val content:Map<String, Any>,
) {
val property = content.get("property") as String?
}
Use the safe cast ('as? String') instead of 'as String?'. [CastToNullableType]
→ as String? 대신에 as? String 을 사용해서 캐스팅하라는 내용이었고,,
당시의 저는 '도대체 뭐가 다른 것일까...' 라는 생각을..
→ as는, 타입 캐스팅이 불가능할 경우 컴파일러가 예외를 던진다!
= 위 코드에서, property를 조회한 결과가 null이었고, as String으로 캐스팅했다면
해당 타입으로 캐스팅할 수 없으므로 예외가 발생하는 것.
그렇기에, Unsafe Cast Operator라고 한다!
→ 위에서 말한 예외를 피하고 싶을 때 쓸 수 있는, Safe cast operator!
→ 캐스팅 실패시, 예외를 던지는 대신 null을 반환한다!
다만, 아래와 같은 캐스팅에서는 as? String으로 캐스팅하면 실제 값은 nullable인 상태!
val x: String? = y as? String
코틀린을 처음 조금씩 찾아볼 때, 코틀린과 자바의 가장 큰 차이점 중 하나로 null 안정성을 많이 들었었는데, 새삼 코틀린은 nullable 처리에 대해 신경을 많이 쓴 느낌..?이었습니다..!
우당탕탕 코틀린 지식 오늘도 +1... 😅