Kotlin ‐ 가능한 한 빨리 플랫폼 타입을 제거하라[Effective Kotlin Item 3] - thought-corner/Backend-PlayGround GitHub Wiki
가능한 한 빨리 플랫폼 타입을 제거하라
- 코틀린에서는 자바의 널 여부가 확인되지 않는 타입을 널 가능 타입으로 처리하는 대신에 특별한 타입으로 처리한다.
- 이를 플랫폼 타입(platform type)이라고 한다.
- 플랫폼 타입은
String!과 같이 타입 이름 뒤에 느낌표 하나(!)로 표기한다.
- 하지만 플랫폼 타입을 코드에 직접 정의할 수 없다.
val name: String = User().name // 만약 자바에서 null을 리턴하면 NPE 발생
println(name.length)
- 플랫폼 타입을 널 불가능 타입으로 캐스팅하는 것은 타입을 지정하지 않은 것보다 낫지만 여전히 위험은 도사리게 된다.
null이 될 수 없다고 가정한 것이 실제로 null일 수 있기 때문이다.
- 따라서 안전성을 보장하기 위해 자바로부터 플랫폼 타입을 가져올 때는 항상 매우 주의해야 한다. 함수가 현재는
null을 반환하고 있지 않지만, 미래에 null을 반환하지 않을 것이라는 보장이 없기 때문이다.
- 코틀린과 상호 운용을 해야 하는 자바 코드를 어느 정도 제어할 수 있다면
@Nullable과 @NotNull 어노테이션을 적용하는 것이 좋다.