예외의 종류
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 블록이 범벅된 코드가 될 수도 있다. 이렇게 되면 코드는 지저분해지고 흐름을 파악하고 이해하기 힘들어질 것이다.
그래서 애플리케이션 예외를 통해서 비즈니스적 예외를 던진다.
'개발 > java' 카테고리의 다른 글
카멜케이스 파스칼케이스 스네이크케이스 (0) | 2019.01.07 |
---|---|
Rxjava 익스텐션 (0) | 2018.11.14 |
자바 람다식이란? (0) | 2018.10.06 |
자바 개발 쓰레드에 대한 정리와 제네릭 사용이유 (0) | 2018.09.29 |
steemit java commitor 되기 2 새로운 프로젝트 만들기 (0) | 2018.09.28 |
댓글