1 분 소요

2023. 01. 13. 수업내용 정리

예외

  • 예외(Exception)를 포함하는 자바 언어에서 발생할 수 있는 모든 오류의 타입은 Throwable(java.lang.Throwalbe) 클래스를 상속받는 모든 것들을 의미한다.

예외의 구조

(16) 예외 1

  • throws, thorw, catch 대상이 되는 모든 타입(혹은 객체)은 java.lang.Throwable을 상속 받는다.
  • java.lang.RuntimeException 을 상속받는 모든 예외(Exception)는 빌드(Build) 전까지 예외 스코프 및 유효성 검사를 하지 않는다.
  • 그런 이유로 java.lang.RuntimeException을 상속 받는 모든 예외를 언체크(드) 예외(Unchecked Exception, 확인되지 않으 예외)라고 하며, java.lang.RuntimeExceptino을 상속 받지 않는 모든 예외를 체크(드) 예외(Checked Exception,확인된 예외)라고 한다.
  • java.lang.Error 및 이를 상속 받는 모든 에러(Error)는 직접 상속 받아 사용하지 않는다.



메서드 예외 시그니처

  • (8) 메서드 파일 참고



예외 발생시키기

  • 고의로 어떠한 예외를 발생시키고자 할 때 아래와 같이 사용할 수 있다.
    thorw [예외 객체]; //Exception은 곧 타입이므로 변수 처럼 사용가능.. 
    

    가령, java.lang.Exception 타입의 예외를 발생 시키기 위해 아래와 같이 실행할 수 있다.

    throw new Exception("예외 메세지");
    
  • throw 키워드를 사용하여 예외를 발생시킬 경우 해당 위치에서 즉시 해당 메서드 실행이 중단되고 호출자로 실행점이 넘어간다. retrun처럼.



예외 처리하기

  • 특정 코드를 실행하면서 발생할 수 있는 예외가 발생했을 경우 오류를 일으키며 종료하는 것이 아니라, 내가 원하는 예외 로직을 실행하기 위해 사용한다.
    try{
    // 예외가 발생할 가능성이 있는 코드
    // try{} 구현부 실행 중 예외가 발생한 구문에서 바로 catch{} 구현부의 실행점으로 옮겨감에 유의한다. 
    } catch([처리할 예외 선언]){
    // 예외가 발생했을 경우 실행할 코드 
    // 위 try {} 코드를 실행하며 예외가 발생하지 앟을 경우 catch{} 구문이 실행되지 않음에 유의한다. 
    } finally {
    // try{} 구문이 예외 없이 성공적으로 실행이 되든, 예외가 터져서 catch{} 구문이 실행되든 반드시 실행함을 보장 받을 구문
    // try{} 및 catch{} 구현부와 달리 생략할 수 있다.
    // finally{} 구현부를 사용하고자 할 때에는 반드시 try-catch 문의 가장 마지막에 적는다. 
    }
    

    하나의 try 문 안에서 발생할 수 있는 예외가 여러개이고, 각 오류에 대해 다른 로직을 실행하고자 할 때 아래와 같이 catch를 여러개 사용할 수 있다.

    try{
    
    }
    catch([처리할 예외 A 선언]){
    
    }
    catch([처리할 예외 B 선언]){
    
    }
    catch([처리할 예외 C 선언]){
    
    } finally {
    
    }
    

    단, 선행하는 에외의 타입이 후행하는 예외읭 타입보다 부모여서는 안된다.



Try With Resource

  • Try With Resourcetry문 실행 종료시(catch 종료 포함) 모든 경우에 AutoCloseable(java.lang.AutoCloseable) 인터페이스를 구현하는 객체의 close() 메서드를 호출하는 것을 보장한다.
  • 주로 JDBC(Java Database Connector) 개발시 JVM과 DBMS간의 연결 객체가 닫히지 않아 Connection Leakage(Leak)가 발생, 어느 시점부터 JVM에서 DBMS로 연결하지 못하는 사고를 방지하기 위해 사용한다.
    try([AutoCloseable을 구현하는 객체]){
    
    } ...
    

태그:

카테고리:

업데이트:

댓글남기기