아이템 4. inferred 타입으로 리턴하지 말라

코틀린에서 타입을 추론할 땐 오른쪽에 있는 피연산자에 맞게 타입이 추론된다.

open class Animal
class Zebra: Animal()

fun main() {
  var animal = Zebra()
  animal = Animal() // Type mismatch 에러 발생
}

animal이 바로 오른쪽에 있는 피연산자인 Zebra 타입으로 추론되기 때문에 Animal 타입으로 재할당할 경우 컴파일 에러가 발생한다.

일반적인 경우 타입을 명시해서 해결할 수 있다.

open class Animal
class Zebra: Animal()

fun main() {
  var animal: Animal = Zebra() // Animal 타입 명시로 해결
  animal = Animal()
}

하지만 라이브러리나 외부 API처럼 직접 코드를 조작할 수 없는 경우 이런 문제를 쉽게 해결할 수 없다. 따라서 리턴 타입은 외부에서 확인할 수 있게 명시적으로 지정하는 것이 좋다.

정리

  • 타입을 확실하게 지정해야 하는 경우 명시적으로 지정한다.

  • 외부 API를 만들 때는 반드시 타입을 지정한다.

Last updated