Effective Kotiln

[이펙티브 코틀린] 3. 최대한 플랫폼 타입을 사용하지 마라

최데브 2023. 1. 13. 22:11

플랫폼 타입?

다른 프로그래밍 언어에서 와서 null 가능 여부를 알 수 없는 타입을 플랫폼 타입이라고 한다.

플랫폼 타입을 사용하면 해당 부분도 null 에러가 발생할 위험이 있으며 해당 코드를 사용하는 곳까지 영향을 줄 수 있다.

예를 들면 아래와 같은 상황이 있다. 안드로이드 개발자가 자바 코드로 코드를 작성하다가 코틀린으로 변경해서

 코드를 이어서 작성한다고 가정해보자.

// 자바
public String getValue() {
    return null;
}

// 코틀린
fun statedType() {
    val value: String = JavaClass().value   // NPE
    // ...
    println(value.length)
}

fun platformType() {
    val value = JavaClass().value
    // ...
    println(value.lenghth)  // NPE
}

플랫폼 타입이기 때문에 사전에 해당 코드가 null 인지 체크 할 수가 없다.

빠르게 눈치를 채고 수정한다면 다행이지만 일반적으로 개발자는 getValue() 가 null 을 리턴할거라고 생각하지 않는다.

다른 곳에서 잘못 작성했다고 생각하고 한참을 헤매게 될 수도 있다. 끔찍하다.

 

또한 당장 null 이 getValue()에 나오지 않는 상황이여서 잘됐다고 하더라도 언제 문제를 일으킬지 모르는 위험한 코드가 된다.

 

최대한 플랫폼 타입을 사용하는것을 피하는 것이 좋고 어쩔 수 없다면 모든 것을 nullable 하다고 가정하고 코드를 작성해야할 것이다. null 이 아니라고 확신한다면 !! 을 사용해주면 된다.

만약 자바 코드를 직접 작성 할 수 있는 상황이라면 @Nullable , @NotNull 어노테이션을 사용해서 명시해주면

코드 작성에 도움이 된다.

 

플랫폼 타입은 위험을 항상 가지고 있으므로 최대한 제거하는것이 좋다.

반응형