RuntimeException에 throws를 꼭 써야할까?

선종우·2023년 5월 14일
0

1. 공부배경

  • 스프링 공부 중 RuntimeException 발생 시 메소드에 throws를 꼭 써야하는지, throws 유무에 따라 결과가 달라지는 지 궁금해졌다.
  • Java의 RuntimeException은 Exception에 대한 처리를 강제하지 않고, 처리되지 않은 Exception은 어차피 상위 call stack으로 전파될텐데 굳이 throws가 필요한가 싶었다.

2. 공부내용

  • 실험코드 각 메소드별로 throws를 넣어보았다. 1) service#find에 throws 삽입 2) controller#find에 throws삽입 3) Main#find애 throws삽입

    class Main{
    	public static void main(String[] args){
       	controller c1 = new controller;
       	for(int i = 0; i < 10; i++){
           	system.out.println(i);
               
           }
       }
    }
    
    class contorller{
    	service s1 = new service();
       public void find(){
       	 s1.find();
       }
    }
    
    class service{
    	public void find(){
       		throw new RuntimeException();
       }
    }
  • 3개의 실험결과 모두 예외발생에 따라 프로그램이 강제로 종료됐다.


3. 정리

  • RuntimeException이 있더라도 method에 throws는 필수가 아니다.
  • throws 키워드 자체는 Exception(checked exception)과 RuntimeException(unchecked exception)모두에 사용할 수 있지만, unchekced exception에서의 throws는 해당 메소드가 예외를 일으킬 수 있다는 명시적 선언일 뿐 기능적으로는 큰 의미가 없다.

0개의 댓글