ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kotlin에서 예외 처리와 스택 추적 이해하기: data object vs class
    kotlin 2025. 4. 3. 10:44

    Kotlin에서 예외 처리 시 스택 추적(Stack Trace)은 디버깅과 문제 해결에 중요한 역할을 합니다. 이 글에서는 data objectclass를 사용하여 예외를 정의할 때의 차이점과 예외 객체가 생성될 때 스택 추적이 어떻게 기록되는지 설명합니다.

    1. data objectclass의 차이

    Kotlin에서 예외를 정의할 때 data objectclass를 사용할 수 있습니다. 두 방식은 예외 객체의 생성과 스택 추적 기록에 있어 중요한 차이를 가집니다.

    • data object: 싱글톤 패턴으로 동작하여 프로그램 실행 중 단 하나의 인스턴스만 존재합니다. 예외를 던질 때마다 동일한 인스턴스를 사용하므로, 스택 추적은 객체가 초기화된 시점의 정보를 반영합니다.

    • class: 새로운 인스턴스를 생성할 수 있으며, 예외를 던질 때마다 새로운 객체를 생성하면 생성 시점의 스택 추적을 기록합니다. 이는 예외가 발생한 정확한 위치를 파악하는 데 유리합니다.

    2. 예외 생성 시 스택 추적 기록

    예외 객체가 생성될 때, JVM은 현재 호출 스택을 캡처하여 스택 추적을 기록합니다. 이는 Exception 클래스의 생성자가 호출될 때 내부적으로 수행됩니다. 각 예외 객체는 생성 시점의 호출 스택 정보를 포함하므로, 예외를 던질 때마다 정확한 스택 추적을 얻을 수 있습니다.

    3. 예제 코드

    다음은 data objectclass를 사용하여 예외를 정의하고 스택 추적을 출력하는 예제입니다:

    sealed class CustomException : Exception() {
        data object SingletonException : CustomException()
        class NewInstanceException : CustomException()
    }
    
    fun main() {
        CustomException.SingletonException.printStackTrace() // 동일한 스택 추적
        CustomException.NewInstanceException().printStackTrace() // 생성 시점의 스택 추적
    
        CustomException.SingletonException.printStackTrace() // 동일한 스택 추적
        CustomException.NewInstanceException().printStackTrace() // 생성 시점의 스택 추적
    }

    위 예제에서 SingletonExceptiondata object로 정의되어 동일한 스택 추적을 출력합니다. 반면에 NewInstanceExceptionclass로 정의되어 예외가 생성될 때마다 새로운 스택 추적을 기록합니다.

    결론

    Kotlin에서 예외 처리 시 data objectclass의 차이를 이해하는 것은 중요합니다. class를 사용하여 예외 객체를 매번 새로 생성하면, 예외가 발생한 정확한 위치의 스택 추적을 얻을 수 있습니다. 이는 디버깅과 문제 해결에 있어 더 유용한 정보를 제공할 수 있습니다.

    'kotlin' 카테고리의 다른 글

    Circular Dependency (순환 참조) 문제와 해결 방법  (0) 2025.04.27
Designed by Tistory.