Kotlin에서는 코드의 안정성을 높이기 위해 다양한 검증 도구를 제공한다.
그중 check와 require는 특정 조건을 검증할 때 자주 사용하는 함수다.
두 함수는 비슷해 보이지만, 용도와 발생시키는 예외가 다르다.
이 글에서는 check와 require의 차이점과 사용 방법을 간단히 정리한다.
checkNotNull, requireNotNull 로 null 체크를 할 수 있으며 이후 null이 아니라고 가정한다.
따라서 스마트 캐스트를 사용할 수 있다.
check 함수
check는 코드 실행 중 내부 상태를 검증할 때 사용한다.
개발자가 의도한 상태가 유지되고 있는지 확인하며, 조건이 만족되지 않으면 IllegalStateException을 발생시킨다.
fun process(input: String?) {
check(input != null) { "Input should not be null" }
println("Processing: $input")
}
위 코드에서 check는 input이 null인지 확인하고, null일 경우 예외를 발생시킨다. 메시지를 설정해 오류의 원인을 명확히 전달할 수도 있다.
특징:
- 주로 내부 상태가 올바른지 확인할 때 사용한다.
- 조건이 실패하면 IllegalStateException이 발생한다.
- 비즈니스 로직의 특정 상태를 확인하는 데 적합하다.
require 함수
require는 함수나 메서드의 입력값 검증에 사용한다.
주로 입력값이 특정 조건을 만족하는지 확인하며, 조건이 실패하면 IllegalArgumentException을 발생시킨다.
fun divide(a: Int, b: Int): Int {
require(b != 0) { "Divisor must not be zero" }
return a / b
}
위 코드에서 require는 b가 0인지 확인하고, 0이면 예외를 발생시킨다.
이를 통해 잘못된 입력값으로 인한 문제를 방지할 수 있다.
특징:
- 함수의 입력값이 유효한지 검증할 때 사용한다.
- 조건이 실패하면 IllegalArgumentException이 발생한다.
- 함수나 메서드를 호출할 때 올바른 값을 전달했는지 확인하는 데 적합하다.
check와 require의 차이점
항목 | check | require |
검증 대상 | 내부 상태 확인 | 입력값 확인 |
발생 예외 | IllegalStateException 발생 | IllegalArgumentException 발생 |
주 사용 사례 | 내부 로직 검증 | 함수 입력값 검증 |
check는 프로그램 내부 상태를 점검하는 데 사용하고, require는 함수나 메서드에 전달된 입력값을 확인할 때 사용한다.
사용 시 주의사항
- 조건을 명확히 작성할 것: 검증 조건은 간결하고 직관적으로 작성해 오류 발생 시 문제를 빠르게 파악할 수 있도록 한다.
- 적절한 메시지 제공: 예외가 발생할 때 오류의 원인을 명확히 전달하기 위해 메시지를 잘 작성해야 한다.
- 복잡한 조건은 함수로 분리: 코드의 가독성을 높이기 위해 복잡한 검증 로직은 별도 함수로 작성하는 것이 좋다.
fun validateUser(user: User) {
require(user.age >= 18) { "User must be at least 18 years old" }
check(user.isActive) { "User must be active" }
}
마무리
check와 require는 Kotlin에서 조건 검증을 간결하게 처리할 수 있는 유용한 도구다.
check는 내부 상태를, require는 함수 입력값을 검증하는 데 적합하다.
두 함수의 차이를 잘 이해하고 적절히 활용하면 코드의 안정성과 가독성을 모두 높일 수 있다.
긴 글 읽어 주셔서 감사합니다.
'JAVA & KOTLIN' 카테고리의 다른 글
[JAVA] java 1.8에서 변경 된 time (0) | 2024.12.17 |
---|---|
[KOTLIN] Kotlin by 키워드: 상속보다 위임을 선택해야 하는 이유 (0) | 2024.12.16 |
Kotlin - List to Array, Array to List (0) | 2021.11.06 |
Spring zip 파일 다운로드 (0) | 2021.06.15 |
JAVA XML 파싱으로 데이터 가져오기 (0) | 2020.11.30 |