RuntimeException 처리시점에 따른 결과 차이

선종우·2023년 5월 14일
0

1. 공부배경

  • Springboot 에러처리를 공부하던 중 RuntimeException에서 Throws를 써야하는지 그리고 try~catch로 처리되지 않는 Exceptio은 어떻게 되는지 궁금해졌다.

2.공부내용

  • 아래와 같은 코드를 구성해보았다.

    class Main{
    	public static void main(String[] args){
       
       	for(int i = 0; i < 10; i++){
            controller.find();
            System.out.println(i);
        }
       }
    }
    
    class controller{
    	service s1 = new service();
       	public void find(){
           	s1.find();
           }
    }
    
    class service{
    	public void find(){
       		throw new RuntimeException();
       }
    }
  • 실험결과 1. 에러처리를 하지 않았을 때

    • 0이 한 번 출력되고 프로그램이 중단되어버린다.
    • 그 이유는 method call stack 내에 적절한 Exception handler가 없기 대문이다/
  • 실험결과 2. controller에서 try~catch문을 이용해 적절한 처리를 했을 때

    • 10번의 printStackTrace()가 실행되고 10번의 print문이 실행되었다. 예외가 적절하게 프로그램이 정상적인 기능을 하고 종료되었다.
  • 실험결과 3. main에서 try~catch문을 이용해 적절한 처리를 했을 때

    • 10번의 printStackTrace()가 실행되었으나, print문은 실행되지 않았다.
    • 이는 find() 호출 시 Exception이 발생하여 바로 catch문으로 넘어갔기 때문이다.

3. 정리

  • RuntimeException은 적절히 처리되지 않으면 JVM까지 Exception이 전파되고 프로그램이 강제로 종료된다.
  • Exception처리 위치에 따라서도 프로그램 실행결과가 달라질 수 있다.

0개의 댓글