💡 예외처리(Exception)란?
프로그래밍 실행 중에 예상치 못한 상황이 발생할 때
예외처리를 통해 프로그램이 예외 상황에도 안정적으로 동작할 수 있게 하는 것이다.
예외처리 상황
런타임 오류 : 배열 범위를 벗어난 접근이나 0으로 나누기 같은 오류
외부 자원 접근 : 파일이나 네트워크와 같은 외부 자원 접근시 발생할 수 있는 오류
사용자 입력 : 사용자 입력을 처리할 때 발생할 수 있는 오류, 유효하지 않은 데이터를 입력받은 경우
예외처리 구현 방법
try : 예외가 발생할 가능성이 있는 코드 블록을 정의한다
catch : 발생한 예외를 처리하기 위한 코드 블록, catch를 여러번 사용하여 다양하게 처리가능
finally : 예외 발생 여부와 관계 없이 항상 실행되어야 하는 코드 블록
try {
// 예외가 발생할 수 있는 코드
int result = 10 / 0; // ArithmeticException 발생
} catch (ArithmeticException e) {
// ArithmeticException을 처리하는 코드
System.out.println("0으로 나눌 수 없습니다.");
} finally {
// 항상 실행되는 코드
System.out.println("작업을 마무리합니다.");
}
💡 printStackTrace()?
try {
// 예외가 발생할 수 있는 코드
int result = 10 / 0; // ArithmeticException 발생
} catch (ArithmeticException e) {
// ArithmeticException을 처리하는 코드
e.printStackTrace();
}
위 예제에서 printStackTrace()는 ArithmeticException이 발생했을 때 그 예외 정보를 표준 에러를 출력하는 용도이다.
💡 throw란?
throw는 개발자가 직접 예외를 발생시키고 싶을때 쓰는 것이다.
예외가 발생한 경우, 포르그램은 예외 객체를 생성하고 throw 키워드를 사용하여 예외를 던진다.
throw는 주로 메소드나 코드 블록 내 발생한 예외를 처리할 때 사용된다.
public void checkAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("나이는 음수일 수 없습니다.");
}
// 나이 검사 로직
}
위 예제에서 checkAge 메소드의 age가 음수인 경우
IllegalArgumentException 오류가 발생한다.
throw new IllegalArgumentException("나이는 음수일 수 없습니다") 부분에서 throw 키워드를 사용하여, 예외를 발생시키고, 해당 예외 객체를 생성하여 메세지를 포함시킨다.
💡 throws란?
throws는 자신을 호출하는 메서드에 예외처리의 책임을 떠넘기는 것이다.
메서드가 호출될 때 이 메소드에서 발생할 수 있는 예외를 호출자에게 알려줌
public class ThrowTest {
public static void main(String[] args) {
int n1, n2;
n1=12;
n2=0;
try {
throwTest(n1, n2);
} catch (ArithmeticException e) {
// n1/n2 라면 발생했을 것
System.out.println("ArithmeticException: " + e.getMessage());
}
}
public static void throwTest(int a, int b) throws ArithmeticException{
System.out.println("throw a/b: "+ a/b);
}
위 예제를 보면 throwTest 메소드 뒤에 throws ArithmeticException 부분이 보일 것이다. ArithmeticException 예외가 발생하면
메소드를 호출한곳(main메서드)에서 예외처리를 넘겨주라는 뜻이다.
예외처리를 넘겨받은 main메서드는 반드시 try-catch구문으로 메서드호출부분을 감싸줘야 한다.
예외처리를 하는 구문이 없으면 오류처리를 아무도 안하게 되기때문에, throws를 쓰면 그 호출한 메서드에서 try-catch 구문을 해줘야되는 것을 잊으면 안된다.