[kotlin] require(), check()로 조건 검사를 해보자

devel_liz·2024년 11월 5일
1

require(), check()가 뭐예요?

require(), check()는 Kotlin에서 주로 조건 검사를 위한 도구로 사용된다.
이 함수들을 사용하면 코드의 가독성이 높아지고 예외 처리를 단순화하여 오류를 더 쉽게 파악할 수 있다는 이점이 있다.

우선 require()를 알아보자

주로 함수의 매개변수 조건을 확인하기 위해 사용된다.

fun require(value: Boolean, lazyMessage: () -> Any): Unit

조건이 false면 IllegalArgumentException를 던진다.
함수에 전달된 인자가 특정 조건을 충족하는지 검사할 때 사용된다.

샘플 코드

fun setAge(age: Int) {
    require(age > 0) { "Age must be positive" }
}

check()

주로 프로그래머의 실수로 발생할 수 있는 불변 조건 검사를 위해 사용된다.

fun check(value: Boolean, lazyMessage: () -> Any): Unit

조건이 false일 때 IllegalStateException를 던진다.
객체 상태가 특정한 조건을 만족해야 하는 경우 사용한다.

샘플 코드
*예를 들어 객체가 초기화 되었는지 확인할 때 유용하다

val list = listOf(1, 2, 3)
check(list.isNotEmpty()) { "List should not be empty" }

require(), check() 차이점이 뭐야?

  1. 던지는 exception이 다르다.
    check()는 IllegalStateException을 던지는 반면 require()는 IllegalArgumentException를 던진다.
  2. 사용 목적이 다르다.
    check()는 코드 로직 내 상태 검증에, require()는 함수 매개변수 검증에 주로 사용된다.

IllegalStateException

객체의 상태가 예상과 다르거나 논리적으로 잘못된 경우 발생한다.
객체가 특정한 상태를 가져야 할 때, 그 상태가 충족되지 않으면 이 예외를 던진다.

샘플 코드

  • 데이터 베이스 연결을 닫은 후에 데이터를 삽입하려 하거나, 초기화되지 않은 객체를 사용하려고 할 때 사용한다.
fun addToDatabase(data: String) {
    if (!isConnectedToDatabase) {
        throw IllegalStateException("Database must be connected to add data.")
    }
    // Add data to database
}

IllegalArgumentException

함수에 전달된 인수(매개변수)가 예상과 다르거나 허용되지 않는 값일 때 발생한다.
함수에 전달된 매개변수가 특정 조건을 만족해야 하는데, 그렇지 않을 때 사용한다.

샘플 코드
*나이 값이 0이하일 때, 나이를 설정하는 함수가 실행되지 않도록 제한할 수 있다.

fun setAge(age: Int) {
    if (age <= 0) {
        throw IllegalArgumentException("Age must be positive.")
    }
    // Set the age
}
profile
Android zizon

0개의 댓글