플랫폼 타입?
다른 프로그래밍 언어에서 와서 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 어노테이션을 사용해서 명시해주면
코드 작성에 도움이 된다.
플랫폼 타입은 위험을 항상 가지고 있으므로 최대한 제거하는것이 좋다.
반응형
'Effective Kotiln' 카테고리의 다른 글
[이펙티브 코틀린] 7. 결과 부족이 발생할 경우 null과 Failure를 사용하라 (0) | 2023.03.01 |
---|---|
[이펙티브 코틀린] 5. 예외를 활용해 코드에 제한을 걸어라 (0) | 2023.01.18 |
[이펙티브 코틀린] 4. inferred 타입으로 리턴하지 말라 (0) | 2023.01.15 |
[이펙티브 코틀린] 2. 변수의 스코프를 최소화하라. (2) | 2023.01.13 |
[이펙티브 코틀린] 1. 가변성을 제한하라 (0) | 2023.01.08 |