코틀린에서는 check와 require라는 함수를 제공한다. [이펙티브 코틀린 - 아이템5. 예외를 활용해 코드에 제한을 걸어라] 에서 자세한 내용이 기재되어있다.
By using
require
andcheck
we get three things
- We are able to validate function arguments and state.
- We are able to throw particular exceptions depending on the case.
- We are able to write idiomatic Kotlin code that is clean and readable.
check()
는 안에 있는 구문이 false
일 때 IllegalStateException
을 발생시킨다.require()
는 안에 있는 구문이 false
일 때 IllegalArgumentException
을 발생시킨다.checkNotNull
, requireNotNull
로 null
체크를 할 수 있으며 이후 null
이 아니라고 가정한다. 따라서 스마트 캐스트를 사용할 수 있다.check 예시
fun viewReview(reviewId: Long) {
val review = reviewRepository.findById(reviewId)
check(review.isPublic()) { "공개된 리뷰가 아닙니다." }
review.addViewCount()
return review
}
require 예시
fun validateReviewModifyForm(reviewModifyRequest: ReviewModifyForm) {
val review = reviewRepository.findById(reviewModifyRequest.reviewId)
require(reviewModifyRequest.content.isNotBlank() && reviewModifyRequest.content.length < MAX_CONTENT_LENGTH) {
"리뷰 내용은 공백이거나 1000자를 초과하면 안됩니다."
}
review.modify(content = reviewModifyRequest.content)
// 생략
}
코드의 동작에 제한을 거는 방법
require()
함수를 사용한다. 제한을 확인하고 만족시키지 못할 경우 IllegalArgumentException
을 발생시킨다.check()
함수를 사용한다.IllegalStateException
을 throw
한다. 상태가 올바른지 확인할 때 사용한다.requireNotNull
, checkNotNull
을 활용해도 좋다. 둘 다 스마트 캐스트를 지원하므로 변수를 ‘언팩(unpack)’하는 용도로 활용할 수 있다.check - Kotlin Programming Language
require - Kotlin Programming Language