Inferred 타입을 가급적 제한하라.
코틀린은 타입 추론을 지원한다. 타입 추론은 매우 편리하지만, 엄격해야 될 필요성이 있다. 예를 들어 다음과 같은 경우를 고려해야 된다.
open class Animal()
class Zebra : Animal()
var zebra = Zebra()
zebra = Animal() // --> Error 발생, zebra의 타입은 Zebra이다.
//방지하기 위한 코드
var zebra: Animal = Zebra()
zebra = Animal()
예외를 활용해 코드를 제한하라.
확실하게 어떤 형태로 동작해야되는 코드가 있다면, 예외를 활용하여 제한을 걸어두는 것이 좋다. 코틀린은 require
, check
등을 지원한다.
제한을 걸면 다음과 같은 이점이 있다.
- 문서를 읽지 않은 개발자도 문제를 확인할 수 있다.
- 문제가 있을 경우 함수가 예상치 못한 동작을 수행하는 것인 예외를 throw한다.
- 코드가 자체적으로 검사된다
- 스마트 캐스트 기능을 활용할 수 있어, 캐스트를 적게 할 수 있다.
require
인자(argument)를 받을 때, 인자에 제한을 걸 수 있다. require
은 조건을 만족하지 않으면 무조건 IllegalArgumentException을 발생시킨다.
ex. 함수가 숫자를 인자로 받아서 팩토리얼을 계산해야한다면, 인자는 양의 정수여야 한다.
fun factorial(n: Int) {
require(n >= 0)
...
}
check
어떤 구체적인 조건을 만족할 때만 함수를 사용할 수 있게 해야 할 때가 있다. check
는 조건을 만족하지 않으면 IllegalStateException을 발생시킨다.
ex. 사용자가 로그인했을 때만 처리를 하게 하고 싶은 함수
fun getUserInfo(): UserInfo {
checkNotNull(userToken)
}
스마트 캐스트
require
, check
등을 통해 조건을 체크할 경우, 뒤 따르는 구문은 해당 조건이 만족했을 것이라고 가정하여 스마트 캐스팅이 진행된다. 예를들어, null 체크를 진행했다면, 이후는 null 조건 확인을 수행할 필요가 없다.
'안드로이드 > Kotlin' 카테고리의 다른 글
4. Effective Kotlin - 가독성 (0) | 2022.03.19 |
---|---|
3. Effective Kotlin - 결과 부족 시 null & Failure를 사용하라 (0) | 2022.03.17 |
1. Effective Kotlin - Destructuring declaration (0) | 2022.03.17 |
[Kotlin] 코틀린 공식 문서 - Coroutine context and dispatchers (0) | 2021.06.28 |
[Kotlin] 코틀린 공식 문서 - Composing suspending functions (0) | 2021.06.28 |