프로그램 오류 (Error)
프로그램 수행 중 치명적인 결함이 발생하여 비정상 종료가 된 상태이다. 자바에서 크게 컴파일 에러, 런타임 에러 그리고 시스템 에러가 있다.
컴파일 에러 | 프로그램 실행을 막는 소스 코드 상 문법 에러. 소스 코드를 수정하면 해결. |
런타임 에러 | 입력값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나 계산식의 오류 등의 에러. if문으로 처리 가능. |
시스템 에러 | 컴퓨터 오작동으로 인한 에러. 소스 코드로 해결 불가. |
소스 코드를 통해서 해결 가능한 에러를 예외(Exception)이라고 하며, 이러한 예측가능한 예외 상황을 처리해주는 것을 "예외처리"라고 한다.
throws Exception
메소드를 선언할 때, throws Exception을 추가하여 호출한 상위 메소드에게 예외처리를 위임하는 방식. 계속 위임을 하면 main()메소드까지 위임을 하게 되고, 메인메소드에서도 thorws Exception을 사용한 상태에서 예외가 발생하게 된다면 프로그램이 비정상 종료된다.
처리방식이 간단하므로 코딩 테스트에서 주로 애용하는 방식이다. 백준에서 다음과 같이 자주 사용된다.
import java.io.*;
public class Main{
// throws IOException를 메인메소드에 추가해서 입출력 예외 처리
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("throws 사용한 예외처리 예시");
bw.flush();
bw.close();
}
}
try ~~ catch
예외가 발생할 코드 부분을 try ~~ catch문으로 감싸주는 처리방식. try구문에서 예외가 발생할 수 있는 코드를 넣고, catch구문에서 앞서 발생할 예외를 처리해주는 코드를 작성한다.
추가로, finally로 예외 발생 여부와 무관하게 항상 처리할 코드를 적어줄 수 있다. finally 사용한 코드는 return문이 있어도 실행 가능하기도 하다.
위의 예시 코드를 try ~~ catch로 적어보면 다음과 같다.
import java.io.*;
public class Main{
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
bw.write("throws 사용한 예외처리 예시");
bw.flush();
bw.close();
} catch (IOException e) { // IOException이 발생했을 시, 아래 코드 작동
// 어떤 예외가 발생했는지 콘솔창에서 출력하라는 명령
e.printStackTrace();
}
}
}
'TIL : JAVA' 카테고리의 다른 글
JDBC 기초 (0) | 2024.03.28 |
---|---|
[Java] 상속 (0) | 2024.03.20 |
[Java] 람다식 (Lambda Expression) (0) | 2024.03.14 |
입출력 (I/O) (0) | 2024.03.03 |
멤버 변수란? (1) | 2024.02.18 |