-
Kotlin에서 예외 처리와 스택 추적 이해하기: data object vs classkotlin 2025. 4. 3. 10:44
Kotlin에서 예외 처리 시 스택 추적(Stack Trace)은 디버깅과 문제 해결에 중요한 역할을 합니다. 이 글에서는
data object
와class
를 사용하여 예외를 정의할 때의 차이점과 예외 객체가 생성될 때 스택 추적이 어떻게 기록되는지 설명합니다.1.
data object
와class
의 차이Kotlin에서 예외를 정의할 때
data object
와class
를 사용할 수 있습니다. 두 방식은 예외 객체의 생성과 스택 추적 기록에 있어 중요한 차이를 가집니다.data object
: 싱글톤 패턴으로 동작하여 프로그램 실행 중 단 하나의 인스턴스만 존재합니다. 예외를 던질 때마다 동일한 인스턴스를 사용하므로, 스택 추적은 객체가 초기화된 시점의 정보를 반영합니다.class
: 새로운 인스턴스를 생성할 수 있으며, 예외를 던질 때마다 새로운 객체를 생성하면 생성 시점의 스택 추적을 기록합니다. 이는 예외가 발생한 정확한 위치를 파악하는 데 유리합니다.
2. 예외 생성 시 스택 추적 기록
예외 객체가 생성될 때, JVM은 현재 호출 스택을 캡처하여 스택 추적을 기록합니다. 이는
Exception
클래스의 생성자가 호출될 때 내부적으로 수행됩니다. 각 예외 객체는 생성 시점의 호출 스택 정보를 포함하므로, 예외를 던질 때마다 정확한 스택 추적을 얻을 수 있습니다.3. 예제 코드
다음은
data object
와class
를 사용하여 예외를 정의하고 스택 추적을 출력하는 예제입니다: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() // 생성 시점의 스택 추적 }
위 예제에서
SingletonException
은data object
로 정의되어 동일한 스택 추적을 출력합니다. 반면에NewInstanceException
은class
로 정의되어 예외가 생성될 때마다 새로운 스택 추적을 기록합니다.결론
Kotlin에서 예외 처리 시
data object
와class
의 차이를 이해하는 것은 중요합니다.class
를 사용하여 예외 객체를 매번 새로 생성하면, 예외가 발생한 정확한 위치의 스택 추적을 얻을 수 있습니다. 이는 디버깅과 문제 해결에 있어 더 유용한 정보를 제공할 수 있습니다.'kotlin' 카테고리의 다른 글
Circular Dependency (순환 참조) 문제와 해결 방법 (0) 2025.04.27