본문 바로가기

프로그래밍/JAVA

Exception

- java.lang.Exception


- Exception은 Checked Exception과 Unchecked Exception으로 나뉜다. 



- Unchecked Exception

Unchecked Exception은 RuntimeException을 상속한다. 즉, Runtime시 발생하는 예외들이다. 


https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html

AnnotationTypeMismatchException,

 ArithmeticException,

 ArrayStoreException,

 BufferOverflowException,

 BufferUnderflowException,

 CannotRedoException,

 CannotUndoException,

 ClassCastException,

 CMMException,

 ConcurrentModificationException,

 DataBindingException,

 DOMException,

 EmptyStackException,

 EnumConstantNotPresentException,

 EventException,

 FileSystemAlreadyExistsException,

 FileSystemNotFoundException,

 IllegalArgumentException,

 IllegalMonitorStateException,

 IllegalPathStateException,

 IllegalStateException,

 IllformedLocaleException,

 ImagingOpException,

 IncompleteAnnotationException,

 IndexOutOfBoundsException,

 JMRuntimeException,

 LSException,

 MalformedParameterizedTypeException,

 MirroredTypesException,

 MissingResourceException,

 NegativeArraySizeException,

 NoSuchElementException,

 NoSuchMechanismException,

 NullPointerException,

 ProfileDataException,

 ProviderException,

 ProviderNotFoundException,

 RasterFormatException,

 RejectedExecutionException,

 SecurityException,

 SystemException,

 TypeConstraintException,

 TypeNotPresentException,

 UndeclaredThrowableException,

 UnknownEntityException,

 UnmodifiableSetException,

 UnsupportedOperationException,

 WebServiceException,

 WrongMethodTypeException


익숙한 ClassCastException이나 NullPointerException, IllegalArgumentException, IllegalStateException, IndexOutOfBoundsException 등이 보인다.

모두 RuntimeException의 Sub Exception들이다.


이런 Unchecked Exception들은 catch나 throw를 하지 않는다. 개발자가 코드에 문제 발생시 예외가 발생되도록 의도된 것들이다.




- Checked Exception

RuntimeException을 제외한 나머지 녀석들이다. 대표적으로 IOException. SQLException 등이 있다. 


catch 문으로 잡거나 throws로 Exception을 호출한 대상으로 던지는 방법으로 해결해야 한다. 그렇지 않으면 compile error가 발생한다. 




- 처리는 어떻게 하는가?

예외 복구, 회피, 전환하는 방법이 있다. 



- 예외 복구

예를 들어 요청된 파일을 읽으려고 하는데 없는 경우 IOException이 발생하며, 이때 catch문으로 잡아 사용자에게 이 상황을 알리고 다른 파일을 읽도록 안내 처리할 수 있다. 

이런 경우를 예외 복구라고 할 수 있다. 



- 예외 회피

Exception 발생시, 자신이 처리하지 않고 throws 하는 것을 말한다. 

처리하는 부분이 존재하는 경우 써야 한다. 아무곳에서도 처리하지 않는다면 무책임한 회피만 하게 되므로 무작정 회피해선 안된다. 



- 예외 전환

Exception 발생시, 무작정 throws 하는게 아니라 좀 더 디테일하고 의미있는 Exception으로 바꾸는 것을 말한다.

예를 들어 SQL 사용 중 SQLException이 발생하였는데 그 원인이 사용자의 id가 중복되어 발생한 경우라면, DuplicationUserIdException으로 전환해서 throws 하는게 좋다.

호출한 대상이 좀 더 디테일한 Exception을 받아 나은 처리를 할 수 있도록 하자.














'프로그래밍 > JAVA' 카테고리의 다른 글

String, StringBuffer, StringBuilder  (0) 2019.03.19
Object의 메서드/equals/hashCode/clone  (0) 2019.03.19
JVM  (0) 2019.03.19
ArrayList + Generic 구현하기  (0) 2019.02.28
Java Collections Framework  (0) 2019.02.28