목표
자바의 예외 처리에 대해 학습하세요.
학습할 것 (필수)
- 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)
- 자바가 제공하는 예외 계층 구조
- Exception과 Error의 차이는?
- RuntimeException과 RE가 아닌 것의 차이는?
- 커스텀한 예외 만드는 방법
java에서 예외를 처리하는 방법.
try { 로직 } catch (Exception e) { 로직을 돌다 오류 발생시 이 scope로 옴 } finally { 마지막 작업 } try catch구문을 생략하고 메소드 옆에 throws exception 을 붙이면 생략 가능함. throw new Exception으로 새로운 익셉션을 로직에서 호출할수 있음. catch (RuntimeException | IoException e) { } 이런식으로 멀티캐치를 사용할수 있다. 다만 주의할점은 사용하는 익셉션들이 서로 상속관계에 있으면 안된다는 것이다. try with resources try (SomeResource resource = getResource()) { // 로직 } catch (Exception e) { } try에 객체를 전달하면 try 코드 블록이 끝나면 자동으로 종료해줌
Java가 제공하는 예외 계층 구조
최상위에 Exception 이 존재하고
그 아래에 subclass 로는
AclNotFoundException, ActivationException, AlreadyBoundException, ApplicationException, AWTException, BackingStoreException, BadAttributeValueExpException, BadBinaryOpValueExpException, BadLocationException, BadStringOperationException, BrokenBarrierException, CertificateException, CloneNotSupportedException, DataFormatException, DatatypeConfigurationException, DestroyFailedException, ExecutionException, ExpandVetoException, FontFormatException, GeneralSecurityException, GSSException, IllegalClassFormatException, InterruptedException, IntrospectionException, InvalidApplicationException, InvalidMidiDataException, InvalidPreferencesFormatException, InvalidTargetObjectTypeException, IOException, JAXBException, JMException, KeySelectorException, LambdaConversionException, LastOwnerException, LineUnavailableException, MarshalException, MidiUnavailableException, MimeTypeParseException, MimeTypeParseException, NamingException, NoninvertibleTransformException, NotBoundException, NotOwnerException, ParseException, ParserConfigurationException, PrinterException, PrintException, PrivilegedActionException, PropertyVetoException, ReflectiveOperationException, RefreshFailedException, RemarshalException, RuntimeException, SAXException, ScriptException, ServerNotActiveException, SOAPException, SQLException, TimeoutException, TooManyListenersException, TransformerException, TransformException, UnmodifiableClassException, UnsupportedAudioFileException, UnsupportedCallbackException, UnsupportedFlavorException, UnsupportedLookAndFeelException, URIReferenceException, URISyntaxException, UserException, XAException, XMLParseException, XMLSignatureException, XMLStreamException, XPathException Exception의 subclass들
-
java8 기준으로 무수히 많은 subclass를 지니고 있음
-
대표적으로 RuntimeException , IOException 이 있다.
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 RuntimeException 의 subclass들 ChangedCharSetException, CharacterCodingException, CharConversionException, ClosedChannelException, EOFException, FileLockInterruptionException, FileNotFoundException, FilerException, FileSystemException, HttpRetryException, IIOException, InterruptedByTimeoutException, InterruptedIOException, InvalidPropertiesFormatException, JMXProviderException, JMXServerErrorException, MalformedURLException, ObjectStreamException, ProtocolException, RemoteException, SaslException, SocketException, SSLException, SyncFailedException, UnknownHostException, UnknownServiceException, UnsupportedDataTypeException, UnsupportedEncodingException, UserPrincipalNotFoundException, UTFDataFormatException, ZipException IoException의 subclass들
Error와 Exception의 차이
- Exception은 Compile , Runetime 으로 구분지을수 있지만 Error는 Runtime 에만 나타난다.
- Error는 Control 할수 없지만 Exception은 Control할수 있다.
RuntimeException과 RuntimeException이 아닌것의 차이
- RuntimeException 실행중에 따로 명시적으로 예외처리를 강제 하지 않는다.
- RuntimeException이 아닌것은 명시적으로 예외처리를 강제로 해줘야한다.
- 이 예외처리는 컴파일시 체크한다.
같은 Exception인데 예외처리를 강제하지 않는 이유는 무엇일까 ?
- 런타임 예외는 어느곳에서나 발생할수 있는 이슈이며 이것을 일일히 런타임 익셉션을 추가하거나 예외처리를 하는것은 프로그램의 명확성을 떨어뜨리기때문
커스텀한 예외 만드는 방법
- 자신이 원하는 예외를 상속받아 구현한다
class CustomException extends RumtimeException { CustomException() { super();} CustomException(String message) { super(message); } }
출처
'백선생님 온라인스터디' 카테고리의 다른 글
10주차 멀티스레드 프로그래밍 (0) | 2021.01.31 |
---|---|
11주차 Enum (0) | 2021.01.30 |
8주차 - 인터페이스 (0) | 2021.01.16 |
7주차 - 패키지 (0) | 2021.01.12 |
6주차 상속 (0) | 2021.01.10 |