Kotlin 예외 처리 (Exception Handling in Kotlin)
예외 처리 기본 (Basic Exception Handling)
Kotlin에서는 예외를 처리하기 위해 try
, catch
, finally
블록을 사용합니다. try
블록 안에 예외가 발생할 수 있는 코드를 작성하고, catch
블록에서 해당 예외를 처리합니다. finally
블록은 예외 발생 여부와 상관없이 항상 실행됩니다.
기본 예외 처리 예제:
fun main() { try { val result = 10 / 0 } catch (e: ArithmeticException) { println("ArithmeticException 발생: ${e.message}") } finally { println("finally 블록은 항상 실행됩니다.") } }
위 코드에서 0으로 나누기를 시도하면 ArithmeticException
이 발생하며, 이 예외는 catch
블록에서 처리됩니다. finally
블록은 항상 실행됩니다.
다중 catch 블록 (Multiple Catch Blocks)
여러 종류의 예외를 처리하기 위해 다중 catch
블록을 사용할 수 있습니다. 각 catch
블록은 다른 유형의 예외를 처리합니다.
다중 catch 블록 예제:
fun main() { try { val numbers = listOf(1, 2, 3) println(numbers[5]) } catch (e: IndexOutOfBoundsException) { println("IndexOutOfBoundsException 발생: ${e.message}") } catch (e: Exception) { println("Exception 발생: ${e.message}") } finally { println("finally 블록은 항상 실행됩니다.") } }
위 코드에서 잘못된 인덱스 접근으로 IndexOutOfBoundsException
이 발생하며, 첫 번째 catch
블록에서 처리됩니다.
사용자 정의 예외 (Custom Exceptions)
Kotlin에서는 사용자 정의 예외를 생성할 수 있습니다. 예외 클래스는 Exception
클래스를 상속받아 정의합니다.
사용자 정의 예외 예제:
class CustomException(message: String) : Exception(message) fun main() { try { throw CustomException("사용자 정의 예외 발생!") } catch (e: CustomException) { println("CustomException 발생: ${e.message}") } finally { println("finally 블록은 항상 실행됩니다.") } }
위 코드에서 CustomException
을 던지고 catch
블록에서 이를 처리합니다.
예외 다시 던지기 (Rethrowing Exceptions)
필요한 경우 catch
블록에서 예외를 다시 던질 수 있습니다.
예외 다시 던지기 예제:
fun main() { try { try { throw ArithmeticException("0으로 나누기 시도!") } catch (e: ArithmeticException) { println("ArithmeticException 발생: ${e.message}") throw e // 예외 다시 던지기 } } catch (e: ArithmeticException) { println("다시 잡은 예외: ${e.message}") } }
위 코드에서 내부 try
블록에서 발생한 ArithmeticException
을 catch
블록에서 다시 던지고, 외부 try
블록에서 다시 잡습니다.
예외를 사용할 수 있는 함수 (Functions with Exceptions)
함수 내에서도 예외 처리를 할 수 있습니다. 예외를 처리하지 않고 함수 밖으로 던질 수도 있습니다.
함수 내 예외 처리 예제:
fun divide(a: Int, b: Int): Int { if (b == 0) { throw ArithmeticException("0으로 나눌 수 없습니다.") } return a / b } fun main() { try { val result = divide(10, 0) println("결과: $result") } catch (e: ArithmeticException) { println("예외 발생: ${e.message}") } }
위 코드에서 divide
함수는 0으로 나누기를 시도하면 ArithmeticException
을 던집니다. 이 예외는 main
함수에서 처리됩니다.
Kotlin의 예외 처리 기능을 이해하고 적절히 사용하면 프로그램의 안정성을 높이고 오류 발생 시 적절한 조치를 취할 수 있습니다.