본문 바로가기

JAVA

CheckedException vs UnCheckedException

면접에서 질문으로 받아 당황했던 기억이 있어 글을 작성하며 공부를 하게 됐다.

명칭으로 유추를 해 보면 체크를 할 수 있는지 없는지에 대한 예외처리 같다.

그래서 공부했다...


Exception

예상할 수 있는 예외
프로그래머가 만드는 예외


CheckedException

프로그래머가 사용하는 라이브러리, 코드 등에서 new 생성자를 이용해 만들어졌고, 해당모듈을 사용하는 오브젝트에게 여기서 예외가 발생할 수 있으니 throws 키워드를 이용해 상위 caller에게 예외를 전달하든, 네가 확인해서 처리하든지 하라는 확인이 필요한 예외이다.

컴파일 타임에 해당 예외가 체크되어야 하고, 프로그래머에게 예외를 다루거나 throws exception 같은 메소드를 선언할 것을 요구한다.


UnCheckedException

프로그래머가 사용하는 라이브러리, 코드 등에서 만들어졌지만, 해당 모듈을 사용하는 오브젝트에 여기서 발생한 예외를 확인해서 처리하라는 강제를 두지 않는다.

예외를 발생할 수 있지만 필요 없거나 어차피 네가 처리하지 못할 예외니 그냥 상위 caller로 던지라는 뜻이다.

계속 던지다 보면 JVM이 받아서 프로그램을 종료하거나 처리한다.

특히 RuntimeException은 Error가 아닌 Exception을 상속받는데, 이는 전혀 예측할 수 없는 에러가 아니라 개발 도중에 실수 혹은 의도적으로 만들어낼 수 있는 에러기 때문이다.

다만, 확인을 위해서는 프로그램이 실행중이어야 하기에 UnCheckedException이다.




이 사진에서 중요한 점은

Error와 Exception 모두 Throwable을 상속받는다는 것이다.

또한, Exception 중 RuntimeException은 Error임을 기억해야 한다.

쉽게 생각해보면 당연하다.


에러는 예측할 수 없는 오류라고 생각하면 된다.

메모리가 초과할지, 입출력에서 오류가 날지, 실행중에 null 값이 날지 알 수 없기 때문이다.

'JAVA' 카테고리의 다른 글

자바8 - 3. 람다  (0) 2018.10.02
자바8 - 2. 동적 파라미터화  (0) 2018.10.02
HashMap vs HashTable vs ConcurrentHashMap  (0) 2017.12.31
CheckedException vs UnCheckedException  (0) 2017.06.16
JAVA - 로그함수 (밑이 2인 로그 함수)  (0) 2015.11.26
JAVA - 변수  (0) 2014.07.20