본문 바로가기

나중에도 봐야겠지?

2024.04.22 (월) 코틀린 예외 처리

예외란?

  • 예상하지 못한 상황에서 발생하는 오류
  • 프로그램이 정상적으로 진행되지 못하는 상태
  • 이를 처리하지 않으면 예상치 못한 종료로 이어질 수 있음

예외가 발생하는 경우

  • 입력 데이터 유효성 검사 오류 처리:
    • 클라이언트로부터의 잘못된 요청 또는 부적절한 입력이 발생할 경우 ValidationException을 통해 클라이언트에게 유효성 오류를 전송
  • 일반적인 서버 오류 처리:
    • 예상치 못한 서버 내부 오류에 대비하여 InternalServerException을 처리하여 로깅하고 사용자에게 적절한 오류 메시지를 제공
  • 데이터베이스 연결 오류 처리:
    • 데이터베이스 연결이 실패하면 DatabaseConnectionException을 처리하여 적절한 에러 메시지를 로깅하거나 사용자에게 알림
  • 인증 및 권한 오류 처리:
    • 사용자의 인증이 실패하거나 권한이 부족한 경우 AuthenticationException 또는 AuthorizationException을 처리하여 적절한 응답을 생성
  • 외부 서비스 호출 오류 처리:
    • 외부 API 호출 중 오류가 발생하면 ExternalServiceException을 처리하여 로깅하거나 다른 대체 동작을 수행

예외를 다루는 방법

try-catch 사용
  • try문에 예외가 발생할 수 있는 코드를 작성
  • catch문에 예외가 발생했을 때 수행할 동작을 작성
fun main() {
    val userInput = "abc"
    val result = safeIntegerConversion(userInput)
    println(result)
}

fun safeIntegerConversion(str: String): Int {
    return try {
        str.toInt()
    } catch (e: NumberFormatException) {
        println("Error: ${e.message}")
        0
    }
}
finally 도 같이 사용
  • 예외 발생 여부에 관계없이 항상 실행해야 하는 동작을 작성
fun main() {
    performFileOperations()
}

fun performFileOperations() {
    val file = File("example.txt")

    try {
        // 파일 관련 작업 수행
        println("File operations performed.")
    } finally {
        // 항상 실행되는 블록
        file.close()
        println("File closed.")
    }
}

 

흐름 제어를 위해서도 사용할 수 있다
  • throw 키워드를 사용해 명시적으로 예외를 발생시킬 수 있다
fun main() {
    try {
        validateInput("")
    } catch (e: IllegalArgumentException) {
        println("Caught an exception: ${e.message}")
    }
}

fun validateInput(input: String) {
    if (input.isBlank()) {
        throw IllegalArgumentException("Input should not be blank.")
    }
    println("Input is valid: $input")
}