require : argument를 제한할 수 있다.check: 상태와 관련된 동작을 제한할 수 있다.assert: 어떤 것이 true인지 확인할 수 있다. (assert 테스트 모드에서만 작동)return 또는 throw와 함께 활용하는 Elvis 연산자require() true인지 체크한다.false라면 IllegalArgumentException을 발생시킨다.requireNotNull() null이 아니면 value를 반환한다.null이면 IllegalArgumentException을 발생시킨다.💻 IllegalArgumentException
- 사용자가 잘못된 값을 입력하는 경우에 발생한다.
- 사용자의 잘못으로 발생하는 에러를 대표한다.
fun calculate(vale: Stirng?){
// require() 사용 전
if(value.isNullOrEmpty()){
throw IllegalArgumentException("값이 null 혹은 공백입니다.")
}
// require() 사웅 후
rqruie(!value.isNullOrEmpty()) {"값이 null 혹은 공백입니다."}
}
enum class Operator(val op: String) {
PLUS("+"), MINUS("-)
// requireNotNull() 사용 전
fun convertToOperator(op: String): Operator {
return entries.toTypedArray().firstOrNull { it.op == op } ?: throw IllegalArgumentException("사칙연산 기호가 아닙니다.")
}
// requireNotNull() 사용 후
fun convertToOperator(op: String): Operator {
return requireNotNull(entries.toTypedArray().firstOrNull {it.op == op}) {"사칙연산 기호가 아닙니다."}
}
}
Enum entries.toTypedArray() 💭
:Kotlin 1.9.0을 사용할 경우,enum을 쓴다면value()대신entries사용을 권장한다고 한다.Enum values함수는 열거된 상수들을 배열 형태로 반환하는데, 배열은 기본적으로 내부 요소가 변경될 수 있기 때문에Enum의values는 매번 객체를 생성하는 구조로 설계될 수밖에 없다.
check()
true인지 체크한다.false이면 IllegalStateException을 발생시킨다.checkNotNull()
null이 아니라면 value를 반환한다.null이면 IllegalStateException을 발생시킨다.🎮 IllegalStateException
: 사용자가 올바른 값을 입력했지만, 코드가 값을 처리할 준비가 되지 않은 경우 발생한다.
ex) 체스 게임을 진행해야 하는데 체스판이 없는 경우
fun connect (isConnected: Boolean, connectJob: () -> Unit) {
// check() 사용 전
if(isConnected) {
throw IllegalStateException("이미 연결되어 있습니다.")
}
// check() 사용 후
check(!isConnected) {"이미 연결되어 있습니다."}
connectJob()
}
class BleDevice {
var connectedState: String? = null
fun connect(connectJob: () -> Unit) {
// checkNotNull() 적용 전
val state = if (connectedState == null) {
throw IllegalStateException("이미 연결되어 있습니다.")
} else {
connectedState
}
// checkNotNull 사용 후
val state2 = checkNotNull(connectedState)
connectJob()
}
}
마무리 .. 😵💫💭
코틀린 토이 프로젝트에서 유효성 검사 로직을 수정 중 ....Java에만 익숙해져서Kotlin다운 코드를 작성하려고 학습 중인데 어느 케이스에서 사용해야 할지 헷갈리고
공부해야될 내용이 양파 까듯 계속 나온다 ... 계속 하다보면Kotlin도 익숙해지겠지 ...?
출처
Kotlin의 check()와 require()
[Kotlin] Kotlin 예외처리
IllegalArgumentException, IllegalStateException
[Kotlin] enum 사용 시 values() 대신 entries를 써라?