본문 바로가기
  • Where there is a will there is a way.
개발/java

자바 예외처리

by 소확행개발자 2018. 10. 22.

예외의 종류

java.lang.error 


주로 자바 VM에서 발생하는 것이고 따라서 catch블록으로 잡아도 소용없다.


우리가 흔히 알고있는 Exception

java.lang.Exception 클래스로 구성되며

Exception 클래스는 check 와 uncheck 로 구분된다.
check 클래스는 Exception 클래스의 서브클래스이면서 RuntimeException 클래스를 상속하지 않은 것
uncheck 클래스는 RuntimeException을 상속한 클래스들을 말한다.

일반적으로 예외라고 하면 Exception 클래스의 서브클래스 중에서 RuntimeException을 상속하지 않은 것만을 말하는 체크 예외라고 생각해도 된다.
체크예외가 발생할 수 있는 메소드를 사용할 경우 반드시 예외를 처리하는 코드를 함께 작성해야 한다. 

런타임 예외는 catch문으로 잡거나 throws 로 선언하지 않아도 된다. ( 않아도 되는 것이지 못하는 건 아니다 )

RuntimeException은 프로그램의 오류가 있을 때 발생하도록 의도된 것들이다. 대표적으로 오브젝트를 할당하지 않은 레퍼런스 변수를 사용하려고 시도했을 때 발생하는 NullPointerException 과 허용되지 않은 값을 사용해서 메소드를 호출할 때 발생하는 IllegalArgumentException 등이 있다. 


예외처리

예외 처리에는 uncheck 예외로 예를들어 db에서 중복된 아이디를 조회 할때 사용하는 에러가 있고 ( RuntimeException ) 을 상속받아서

check 예외로 애플리케이션 자체의 로직에 의해 의도적으로 발생시키고 조취를 취하는 애플리케이션 예외가 있다. 

애플리케이션 예외를 사용할 경우 예외상황에 대한 리턴 값을 명확하게 코드화하고 잘 관리하지 않으면 혼란이 생길 수 있기 때문에 제대로 동작하지 않을 수 있고 반환 값에 대한 처리로 인하여 if 블록이 범벅된 코드가 될 수도 있다. 이렇게 되면 코드는 지저분해지고 흐름을 파악하고 이해하기 힘들어질 것이다. 

그래서 애플리케이션 예외를 통해서 비즈니스적 예외를 던진다.



댓글