비전공자들을 위한 예외처리 개념잡기

WON HOYEON·2024년 7월 3일

💡 예외처리(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 구문을 해줘야되는 것을 잊으면 안된다.

profile
分からなかったことを整理し、後から見返すための記録です。

0개의 댓글