728x90
이펙티브 코루틴을 요약한 내용입니다.
- 코틀린의 타입 추론은 JVM 세계에서 가장 널리 알려진 특징
- Java 10부터 타입 추론이 도입되었지만 제약 사항이 있음
- 타입 추론을 사용할 때 몇가지 위험한 부분이 있음
- inferred 타입은 정화하게 오른쪽에 있는 피연산자에 맞게 설정
- 슈퍼클래스 또는 인터페이스로는 설정 되지 않음
open class Aniaml class Zebra: Animal() fun main() { var animal = Zebra() animal = Animal() }
- 타입을 명시적으로 지정해서 문제를 해결
open class Aniaml
class Zebra: Animal()
fun main() {
var animal: Aniaml = Zebra()
animal = Animal()
}
- inferred 타입을 노출하면 위험한 일이 발생할 수 있음
// 디폴트로 생성되는 자동차가 있음
interface CarFactory {
fun produce(): Car
}
val DEFAULT_CAR: Car = Fiat126P()
// DEFAULT_CAR는 Car로 명시적으로 지정되어 있으므로 함수 리턴 타입을 제거
interface CarFactory {
fun produce() = DEFAULT_CAR
}
// DEFAULT_CAR는 타입 추론에 의해 자동으로 타입이 지정
val DEFAULT_CAR = Fiat126P()
// CarFactory에서는 Fiat126P 이외의 자동차를 생산하지 못함
- 외부 API에서 이러한 문제가 있다면 쉽게 해결 할 수 없음
- 리턴타입은 API를 잘 모르는 사람에게 전달해 줄 수 있는 중요한 정보
- 명시적으로 지정하는 것이 좋음
정리
- 타입을 확실하게 지정해야 하는 경우 명시적으로 타입을 지정
- 중요한 정보이므로 숨기지 않은 것이 좋음
- 외부 API를 만들 때는 반드시 타입을 지정
- 특별한 이유와 확실한 확인 없이 제거하지 않아야 함
- inferred 타입은 프로젝트가 진전될 때 제한이 너무 많아지거나 예측하지 못한 결과를 낼 수 있음
728x90
'코틀린 스터디 > 이펙티브 코틀린' 카테고리의 다른 글
아이템6) 사용자 정의 오류보다는 표준 오류를 사용하라 (0) | 2024.02.16 |
---|---|
아이템5) 예외를 활용해 코드에 제한을 걸어라 (0) | 2024.02.14 |
아이템3) 최대한 플랫폼 타입을 사용하지 말라 (0) | 2024.02.07 |
아이템2) 변수의 스코프를 최소화하라 (0) | 2024.02.06 |
아이템1) 가변성을 제한하라 (1) | 2024.02.05 |