본문 바로가기
카테고리 없음

예외처리: Throwable, Exception, Error, Throws에 대한 모든 것

by Knowledge Atlas 2025. 4. 13.
반응형
예외처리: Throwable, Exception, Error, Throws에 대한 모든 것

Java에서는 프로그램이 실행되는 도중에 발생할 수 있는 다양한 오류를 처리하기 위해 예외처리를 사용합니다. 예외처리는 프로그램의 안정성을 높여주며, 사용자가 불편함을 겪지 않도록 도와줍니다. 이 글에서는 Throwable, Exception, Error, throws에 대해 깊이 있게 다루어 보겠습니다.

Throwable이란?

Throwable은 Java에서 모든 오류와 예외의 최상위 클래스입니다. 이 클래스는 두 가지 주요 하위 클래스인 ErrorException을 포함하고 있습니다. Throwable을 통해 발생할 수 있는 모든 문제를 처리할 수 있습니다.

Exception과 Error의 차이

Exception은 프로그램의 정상적인 흐름을 방해하는 문제를 나타내며, 이들은 다시 처리할 수 있는 경우가 많습니다. 반면 Error는 시스템이 회복할 수 없는 심각한 문제를 나타내며, 일반적으로 이러한 오류는 개발자가 처리할 수 없습니다.

throws 키워드

throws 키워드는 메서드에서 발생할 수 있는 예외를 선언할 때 사용됩니다. 이 키워드를 사용하면 메서드 호출 시 예외가 발생할 수 있음을 명시적으로 알릴 수 있습니다. 이를 통해 호출하는 측에서 적절한 예외 처리를 할 수 있도록 합니다.

예제: Throwable, Exception, Error 활용하기

이제 실제 예제를 통해 각 개념을 더욱 명확히 이해해 보겠습니다. 아래 표에서는 각각의 개념을 적용한 예제를 보여줍니다.

개념 예제 설명
Throwable try { ... } catch (Throwable e) { ... } 모든 예외 및 오류를 처리합니다.
Exception try { ... } catch (Exception e) { ... } 일반적인 예외를 처리합니다.
Error try { ... } catch (Error e) { ... } 심각한 오류를 처리하려고 시도합니다.

사례 1: 파일 처리 시 발생하는 IOException

파일을 읽거나 쓸 때 발생할 수 있는 IOException은 일반적인 예외 중 하나입니다. 아래의 코드는 파일을 읽는 메서드를 보여줍니다. 이 메서드는 IOException을 throws합니다.

public void readFile(String fileName) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader(fileName));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        reader.close();
    }

위의 메서드를 호출하는 쪽에서는 IOException을 처리해야 합니다. 예외가 발생할 경우, 사용자에게 오류 메시지를 출력하거나 대체 동작을 수행할 수 있습니다.

사례 2: 사용자 정의 예외 만들기

Java에서는 사용자 정의 예외를 만들어 특정 상황에 맞는 예외 처리를 할 수 있습니다. 다음은 사용자 정의 예외를 만드는 예제입니다.

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

    public void validateAge(int age) throws MyCustomException {
        if (age < 18) {
            throw new MyCustomException("미성년자는 접근할 수 없습니다.");
        }
    }

이 메서드는 나이가 18세 미만인 경우 사용자 정의 예외를 발생시킵니다. 이를 통해 더욱 세부적인 예외 처리를 할 수 있습니다.

사례 3: Error 처리

Java의 Error는 시스템이 회복할 수 없는 심각한 문제를 나타냅니다. 예를 들어 StackOverflowError는 무한 재귀 호출로 인해 발생합니다. 다음은 StackOverflowError를 발생시키는 코드 예제입니다.

public void recursiveMethod() {
        recursiveMethod(); // 무한 재귀 호출
    }

이러한 오류는 일반적으로 개발자가 처리할 수 없으며, 시스템의 상태를 점검해야 합니다. Error를 처리하는 것은 어렵지만, 로그를 남기고 문제를 해결하기 위한 조치를 취하는 것이 중요합니다.

실용적인 팁

팁 1: 구체적인 예외 처리

예외를 처리할 때는 가능한 한 구체적인 예외를 처리하는 것이 좋습니다. 예를 들어 IOException 대신 FileNotFoundException을 처리하면, 발생할 수 있는 문제를 더 세부적으로 다룰 수 있습니다. 이를 통해 더 나은 사용자 경험을 제공할 수 있습니다.

팁 2: 예외 메시지 작성

사용자에게 보여줄 오류 메시지는 명확하고 이해하기 쉽게 작성해야 합니다. 예를 들어, "잘못된 입력입니다." 보다는 "이메일 형식이 올바르지 않습니다."와 같이 구체적으로 설명하는 것이 좋습니다. 이는 사용자에게 다음 행동을 안내하는 데 도움이 됩니다.

팁 3: 예외 로그 남기기

예외가 발생했을 때 로그를 남기는 것이 중요합니다. 로그를 통해 어떤 상황에서 예외가 발생했는지 추적할 수 있으며, 이를 통해 문제를 해결하는 데 큰 도움이 됩니다. 또한, 로그는 나중에 분석을 통해 시스템의 취약점을 발견하는 데 유용합니다.

팁 4: 예외 전파

예외를 처리할 수 없는 경우, 해당 예외를 호출자에게 전파할 수 있습니다. 이 때 throws 키워드를 사용하여 메서드 시그니처에 선언하면 됩니다. 이를 통해 호출자가 예외를 처리할 수 있도록 할 수 있습니다. 이는 코드의 가독성을 높이고, 각 메서드가 자신의 책임에 집중하도록 도와줍니다.

팁 5: finally 블록 활용

try-catch 문에서 finally 블록을 활용하면, 예외 발생 여부와 관계없이 반드시 수행해야 하는 코드를 작성할 수 있습니다. 주로 리소스를 해제하거나 정리하는 데 사용됩니다. 예를 들어, 데이터베이스 연결을 종료하는 코드가 여기에 해당합니다.

요약 및 실천 팁


Java의 예외처리는 프로그램의 안정성을 높이는 중요한 요소입니다. Throwable, Exception, Error, throws 키워드의 이해를 바탕으로 예외를 효과적으로 처리하는 것이 필요합니다. 다음은 실천 가능한 팁입니다:

  • 구체적인 예외를 처리하세요.
  • 명확한 예외 메시지를 작성하세요.
  • 발생한 예외에 대한 로그를 남기세요.
  • 예외를 호출자에게 전파할 수 있도록 하세요.
  • finally 블록을 사용하여 리소스를 정리하세요.

이러한 팁을 통해 Java에서의 예외처리를 효과적으로 수행하고, 프로그램의 안정성을 높이는데 기여하시기 바랍니다.

반응형