DeveloPiano

[Java] 예외 처리의 이해 : try-catch와 throws의 차이점 본문

Develop/Java

[Java] 예외 처리의 이해 : try-catch와 throws의 차이점

DevPi 2024. 8. 9. 13:22
반응형

자바에서는 예외 처리를 위해 try-catch 블록과 throws 키워드를 사용할 수 있습니다. 이 두 방법은 예외를 다루는 방식이 다르며, 각각의 사용은 상황에 따라 결정됩니다. 이 글에서는 try-catch와 throws의 차이점을 탐구하고, try-catch의 사용 필요성을 자세히 설명하겠습니다.


try-catch와 throws의 기본 개념

 

  1. try-catch
    • try-catch 블록은 예외가 발생할 수 있는 코드를 try 블록 안에 포함시키고, 해당 예외를 처리할 코드를 catch 블록에 작성합니다. 이 방법은 예외를 메소드 내에서 즉각적으로 처리하고, 메소드 사용자나 호출자에게 예외가 발생했음을 알리지 않습니다.
  2. throws
    • 메소드 선언에 throws 키워드를 사용하는 경우, 메소드 내에서 처리하지 않고 예외를 호출한 메소드로 전파합니다. 이 방법은 메소드를 사용하는 쪽에서 예외 처리의 책임을 지게 만듭니다.

예외 처리 방식의 선택 기준

  1. try-catch 사용 시점 : 메소드 내에서 예외를 즉시 처리하고 정상 흐름을 회복하고자 할 때 사용합니다. 이 방법은 예외 처리를 메소드 내부에서 완결지어 사용자나 호출자가 예외의 복잡성을 신경 쓸 필요가 없도록 할 때 적합합니다.
  2. throws 사용 시점 : 메소드가 예외를 직접 처리하지 않고, 호출자가 예외를 처리하는 방법을 결정하게 하려는 경우에 사용합니다. 이는 메소드 사용자가 예외 처리 방법을 유연하게 선택할 수 있도록 하며, 특히 API나 라이브러리를 설계할 때 유용합니다.

try-catch의 필요성 및 중요성

  • 프로그램의 안정성 유지 : try-catch를 사용하면 예외 상황에서도 프로그램이 중단되지 않고 계속 실행될 수 있습니다.
  • 예외 처리의 캡슐화 : try-catch는 예외 처리 로직을 메소드 내부에서 완결지어, 예외 처리 로직을 외부에 노출하지 않고 캡슐화할 수 있습니다.
  • 사용자 정의 예외 처리 로직 구현 : 특정 예외 상황에 대한 사용자 정의 반응을 구현할 수 있습니다. 예를 들어, 오류 로깅, 사용자에게 오류 정보 제공, 대체 실행 경로 제공 등이 가능합니다.
public void processFile(String fileName) throws IOException {
    FileInputStream file = null;
    try {
        file = new FileInputStream(fileName);
        // 파일 처리 로직
    } catch (FileNotFoundException e) {
        System.out.println("파일이 존재하지 않습니다.");
    } finally {
        if (file != null) {
            file.close();
        }
    }
}

 

이 예제에서는 FileNotFoundException을 try-catch로 처리하고 있습니다. 이렇게 하면 파일이 존재하지 않는 경우에도 메소드의 실행 흐름이 중단되지 않고, finally 블록에서 파일 리소스를 정리할 수 있습니다. IOException은 throws로 선언되어 있어, 파일을 닫는 과정에서 발생할 수 있는 예외는 메소드를 호출한 쪽에서 처리하도록 위임하고 있습니다.


결론

try-catch와 throws는 자바 예외 처리의 두 가지 중요한 방법입니다. 각각의 사용은 예외의 종류, 예외 처리의 책임 소재, 그리고 프로그램의 설계 방향에 따라 달라집니다. try-catch를 통한 예외 처리는 프로그램의 안정성과 사용자 경험을 향상시키는 데 기여하며, 예외 처리 로직을 메소드 내부에 캡슐화하여 복잡성을 관리합니다.

반응형