기록이 힘이다.

왜 우리는 비검사 예외를 선호하는가?(UncheckedException) 본문

JAVA

왜 우리는 비검사 예외를 선호하는가?(UncheckedException)

dev22 2023. 4. 13. 07:18
728x90

-컴파일 에러를 신경쓰지 않아도 되며,

-try-catch로 감싸거나

-메서드 선언부에 선언하지 않아도 된다.

-그렇다면 우리는  비검사 예외만 쓰면 되는걸까? 검사 예외는 왜 있는 것일까?

 

UncheckedException 예제

public class MyApp{

	public void hello(){
    		System.out.println("hello");
        throw new MyException();
    }
    
    public static void main(String[] args){
    	MyApp myApp = new MyApp();
        myApp.hello();
    }
}

편리하다는 것을 이유로 사용하면 안된다.

 

왜 잡지 않은 예외를 메서드에 선언해야 하는가?

-메서드에 선언한 예외는 프로그래밍 인터페이스의 일부다. 즉, 해당 메서드를 사용하는 코드가 반드시 알아야 하는 정보다. 그래야 해당 예외가 발생했을 상황에 대처하는 코드를 작성할 수 있을테니까.

 

비검사 예외는 그럼 왜 메서드에 선언하지 않아도 되는가?

-비검사 예외는 어떤 식으로든 처리하거나 복구할 수 없는 경우에 사용하는 예외다. 가령, 숫자를 0으로 나누거나, null 레퍼런스에 메서드를 호출하는 등.

-이런 예외는 프로그램 전반에 걸쳐 어디서든 발생할 수 있기 때문에 이 모든 비검사 예외를 메서드에 선언하도록 강제한다면 프로그램의 명확도가 떨어진다.

 

Checked Exception 예제

public class MyApp{

    /*
    *@param name
    *@throws MyException
    */
    public void hello(String name) throws MyException{
    	if(name.equals("푸틴")){	
        	throw new MyException();
    	}
        System.out.println("hello");
    }
    
    public static void main(String[] args) throws MyException{ --> exception 확인
    	MyApp myApp = new MyApp();
        try{
        	myApp.hello();
        }catch(MyException e){
        	myApp.hello("기선");
        }
    }
}

가이드 라인: 클라이언트가 해당 예외 상황을 복구할 수 있다면 검사 예외를 사용하고, 해당 예외가 발생했을 때 아무것도 할 수 없다면, 비검사 예외로 만든다.