Java 예외처리

CosmoNumb·2024년 7월 28일
0

java

목록 보기
10/24

예외처리는 프로그램 실행 중에 발생할 수 있는 예외적인 상황을 처리하는 메커니즘입니다. Java에서는 예외를 사용하여 이러한 상황을 처리할 수 있으며, 예외는 프로그램의 정상적인 흐름을 방해하지 않도록 해줍니다.

예외처리의 주요 개념과 방법을 이해하기 위해 다음 내용을 살펴보겠습니다:

예외의 종류

Java에서 예외는 크게 두 가지로 나눌 수 있습니다:

  1. 체크 예외 (Checked Exception):

    • 컴파일 시점에 예외 처리 여부를 검사합니다.
    • 메서드에서 체크 예외를 던질 수 있음을 명시적으로 선언(throws)해야 합니다.
    • 파일 입출력, 네트워크 통신 등 외부 자원과의 상호작용에서 주로 발생합니다.
    • 예: IOException, SQLException
  2. 언체크 예외 (Unchecked Exception):

    • 런타임 시점에 발생하는 예외로, 컴파일 시점에 검사하지 않습니다.
    • 명시적으로 예외를 선언할 필요가 없습니다.
    • 주로 프로그래밍 오류(예: 논리 오류)에서 발생합니다.
    • 예: NullPointerException, ArrayIndexOutOfBoundsException

예외 처리 방법

예외를 처리하는 방법은 크게 두 가지입니다:

  1. 예외를 잡아서 처리 (catch):

    • 예외가 발생할 수 있는 코드를 try 블록으로 감싸고, catch 블록에서 예외를 처리합니다.
    • 예외가 발생하면, catch 블록이 실행되어 예외 처리 로직을 수행합니다.
  2. 예외를 던지기 (throw):

    • 메서드가 예외를 처리하지 않고 호출자에게 예외를 전달합니다.
    • 메서드 선언부에 throws 키워드를 사용하여 던질 수 있는 예외를 명시합니다.

코드 예제

사용자 정의 예외 클래스

먼저, 사용자 정의 예외 클래스 MyCheckedException을 정의합니다:

package exception.basic.checked;

public class MyCheckedException extends Exception {
    public MyCheckedException(String message) {
        super(message);
    }
}

클라이언트 클래스

다음으로, 예외를 던지는 Client 클래스를 정의합니다:

package exception.basic.checked;

public class Client {
    public void call() throws MyCheckedException {
        // 예외를 강제로 발생시킴
        throw new MyCheckedException("예외 발생!");
    }
}

서비스 클래스

이제 예외를 처리하는 Service 클래스를 봅니다:

package exception.basic.checked;

public class Service {
    Client client = new Client();

    /**
     * 예외를 잡아서 처리하는 코드
     */
    public void callCatch() {
        try {
            client.call();
        } catch (MyCheckedException e) {
            // 예외 처리 로직
            System.out.println("예외 처리, message=" + e.getMessage());
        }
        System.out.println("정상 흐름");
    }

    /**
     * 체크 예외를 밖으로 던지는 코드
     * 체크 예외는 예외를 잡지 않고 밖으로 던지려면 throws 예외를 메서드에 필수로 선언해야 한다.
     */
    public void callThrow() throws MyCheckedException {
        client.call();
    }
}

설명

  1. callCatch 메서드:

    • try 블록 안에서 client.call()을 호출합니다.
    • client.call() 메서드는 MyCheckedException을 던질 수 있습니다.
    • 예외가 발생하면 catch 블록에서 예외를 처리하고, 예외 메시지를 출력합니다.
    • 예외를 처리한 후에도 "정상 흐름" 메시지를 출력하여 프로그램이 정상적으로 진행됨을 알립니다.
  2. callThrow 메서드:

    • client.call()을 호출하지만 예외를 잡지 않고 호출자에게 던집니다.
    • 메서드 선언부에 throws MyCheckedException을 추가하여 예외를 던질 수 있음을 명시합니다.
    • 호출자는 이 메서드를 사용할 때 예외 처리를 해야 합니다.

예외 처리의 이점

  • 안정성: 예외 처리를 통해 프로그램이 예상치 못한 상황에서도 중단되지 않고 안정적으로 동작할 수 있습니다.
  • 가독성: 예외 처리를 통해 오류 처리를 명확하게 분리하여 코드의 가독성을 높입니다.
  • 유지보수성: 예외 처리를 통해 오류 상황을 일관되게 관리할 수 있어 유지보수가 용이합니다.

요약

  • 체크 예외언체크 예외의 차이를 이해하고, 언제 사용해야 하는지 알아야 합니다.
  • 예외 처리는 try-catch 블록을 사용하여 예외를 잡아 처리하거나, throws 키워드를 사용하여 예외를 호출자에게 전달하는 방식으로 처리할 수 있습니다.
  • 예외 처리는 프로그램의 안정성과 가독성을 높이는 중요한 기법입니다.

위 예제를 통해 기본적인 예외 처리의 개념과 방법을 이해할 수 있습니다. 예외 처리는 코드의 신뢰성을 높이는 중요한 기술이므로, 이를 잘 이해하고 적용하는 것이 중요합니다.

0개의 댓글