Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 안드로이드 유닛 테스트
- 2022 플러터 설치
- 큐 자바 코드
- 자바 다형성
- android retrofit login
- 서비스 쓰레드 차이
- ar vr 차이
- 클래스
- ANR이란
- 멤버변수
- 2022 플러터 안드로이드 스튜디오
- 스택 자바 코드
- 안드로이드 라이선스 종류
- 스택 큐 차이
- 안드로이드 os 구조
- 서비스 vs 쓰레드
- 안드로이드 유닛테스트란
- rxjava cold observable
- android ar 개발
- 객체
- rxjava disposable
- rxjava hot observable
- 안드로이드 레트로핏 crud
- Rxjava Observable
- 안드로이드 유닛 테스트 예시
- 안드로이드 레트로핏 사용법
- jvm 작동 원리
- jvm이란
- 안드로이드 라이선스
- 플러터 설치 2022
Archives
- Today
- Total
나만을 위한 블로그
[이펙티브 코틀린] 아이템 4. inferred 타입으로 리턴하지 마라 본문
728x90
반응형
타입 추론(type inference) : 코틀린 특징 중 하나. 자바도 자바 10부터 코틀린을 따라 타입 추론을 도입했다.
타입 추론을 쓸 때 위험한 부분들이 있다.
- 할당 시 inferred 타입은 오른쪽 피연산자에 맞게 설정된다. 절대 슈퍼클래스 or 인터페이스로는 설정되지 않는다
open class Animal
class Zebra: Animal()
fun main() {
var animal = Zebra()
animal = Animal() // Type mismatch 오류
}
내가 원하는 타입보다 제한된 타입이 설정됐다면 타입을 명시적으로 지정해서 해결하면 된다.
open class Animal
class Zebra: Animal()
fun main() {
var animal: Animal = Zebra()
animal = Animal()
}
직접 라이브러리를 조작하는 경우 이런 문제를 간단하게 해결할 수 없다.
그리고 이런 경우 inferred 타입을 노출하면 위험한 일이 발생할 수 있다.
CarFactory 인터페이스가 있다고 친다.
interface CarFactory {
fun produce(): Car
}
그리고 다른 걸 지정하지 않았으면 아래처럼 디폴트로 생성되는 자동차가 있다고 친다.
var DEFAULT_CAR: Car = Fiat126P()
코드를 치다 보니 DEFAULT_CAR는 Car로 명시적으로 지정돼 있어 따로 필요없다고 판단해서 함수의 리턴 타입을 제거했다고 한다.
var DEFAULT_CAR = Fiat126P()
이제 CarFactory에선 Fiat126P 이외의 차를 생산하지 못하는 문제가 발생한다.
인터페이스를 내가 직접 만들었다면 문제를 쉽게 찾아서 수정할 수 있을 것이다. 하지만 외부 API라면 문제를 쉽게 해결할 수 없다.
다른 사용자가 이런 외부 API를 봤다면 문제가 있다고 제작자한테 말할 것이다.
리턴 타입은 API를 잘 모르는 사람에게 전달할 수 있는 중요 정보다. 따라서 리턴 타입은 외부에서 확인할 수 있게 명시적으로 지정하는 게 좋다.
반응형
'책 > Effective Kotlin' 카테고리의 다른 글
[이펙티브 코틀린] 아이템 6. 사용자 정의 오류보다는 표준 오류를 사용하라 (0) | 2022.05.26 |
---|---|
[이펙티브 코틀린] 아이템 5. 예외를 활용해 코드에 제한을 걸어라 (0) | 2022.05.22 |
[이펙티브 코틀린] 아이템 3. 최대한 플랫폼 타입을 사용하지 마라 (0) | 2022.05.08 |
[이펙티브 코틀린] 아이템 2. 변수의 스코프를 최소화하라 (0) | 2022.05.07 |
[이펙티브 코틀린] 아이템 1. 가변성을 제한하라 (0) | 2022.05.07 |
Comments