2024. 8. 29. 16:55ㆍJava/예외처리
예외란?
실행 오류가 발생하는 것을 에러라고 한다. 자바에서는 예외라고 하는 에러가 있다. 예외란 잘못된 사용 또는 코드로 인한 오류를 말한다. 예외가 발생하면 프로그램은 곧바로 종료된다. 하지만 예외 처리를 통해 계속 실행 상태를 유지할 수 있다.
일반 예외 : 컴파일러가 예외 처리 코드 여부를 검사하는 예외
실행 예외 : 컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외
예외 처리 코드
예외 처리 코드는 예외가 발생했을 때에 프로그램의 갑작스러운 종료를 막고 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 한다. 예외 처리 코드는 try-catch-finally 블록으로 구성된다. try가 예외 없이 실행되면 catch 블록은 실행되지 않고, 예외가 실행되면 catch가 실행된다. 예외 여부와 상관없이 fianlly 블록이 실행된다. 심지어 try와 catch 안에서도 return문이 실행되도 finally는 무조건 실행된다.
예외 처리 방법
e.getMessage는 예외 이유만 리턴, e.toString은 예외 종류도 리턴, e.printStackTrace는 예외 발생 위치까지 추적하여 리턴한다.
예외 종류에 따른 처리
예외 종류에 따라 예외 코드를 다르게 작성할 수 있다. 다만, catch 블록이 여러개더라도 catch블록은 위에서 하나씩 확인하며 하나만 실행된다. 예외가 발생하면 실행이 중단되고 catch로 넘어가기 때문에 상위 클래스 catch 블록은 나중에 작성하는 것이 좋다.
리소스 자동 닫기
리소스는 사용하기 위해 열고 닫아야 한다. 하지만 예외가 발생하면 리소스가 닫히지 않을 수 있기 때문에 finally 블록에서 처리를 해야한다. 그렇지 않으면 try-with-resources 블록을 사용해야한다.
try(FileInputStream fis = new FileInputStream("file.txt"){
} catch(IOException e){
}
괄호 안에 리소스를 여는 코드를 작성하면, 예외 발생 시 자동으로 close() 메소드가 호출된다.
이를 위해서 AutoCloseable 인터페이스의 close() 메소드를 재정의해야한다.
자바8 이후부터는 외부 리소스 변수를 사용할 수 있다.
예외 떠넘기기
예외가 발생하면 메서드를 호출한 곳으로 떠넘길 수 있다. 메서드가 호출한 곳에서 예외를 받아 처리해야만 한다.
리턴타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ...{}