Java의 예외 계층 이해

게시 됨: 2022-03-08

'예외'라는 용어는 '예외적 사건'의 줄임말입니다. Java에서 예외는 본질적으로 프로그램 실행 중에 발생하고 프로그램의 정상적인 흐름을 방해하는 이벤트입니다. 예외는 일반적으로 런타임 또는 컴파일 타임에 발생하는 원치 않는 대부분의 예기치 않은 예외입니다. 프로그램이 자연스러운 흐름으로 실행되도록 하려면 이러한 모든 예외를 처리해야 합니다.

그러나 예외를 처리하기 전에 Java에 어떤 종류의 예외가 있는지 아는 것이 도움이 될 것입니다. 이 기사를 통해 Java의 다양한 유형의 예외와 그에 따른 예외 계층에 대해 살펴보겠습니다.

목차

Java의 예외 계층

Java 프로그래밍 언어의 예외 계층은 throwable 클래스로 시작합니다. 이 클래스는 Object 클래스에서 파생되며 직접 하위 클래스인 반면 Exception 클래스는 모든 This Throwable 클래스를 두 개의 하위 클래스(Error 및 Exception)로 추가로 분기합니다. 다음은 Java 예외 계층을 더 잘 이해하기 위한 순서도입니다.

Exception 클래스는 Java 프로그래밍 언어로 작업하는 동안 처리해야 할 수 있는 모든 예외를 제공합니다. 이러한 예외의 일반적으로 알려지고 발생하는 몇 가지 예에는 NullPointerException, ClassNotFoundException, IllegalArgumentException 등이 있습니다.

반면에 Error 클래스는 Java 프로그램 아키텍처의 더 심각한 문제를 처리하며 애플리케이션 코드 내에서는 처리되지 않습니다. Java 오류의 몇 가지 예는 InternalError, AssertionError, OutOfMemoryError 등입니다.

Java의 예외는 두 가지 범주로 더 나뉩니다.

  • 확인된 예외 – 컴파일 타임 예외라고도 합니다.
  • 확인되지 않은 예외 – 런타임 예외라고도 합니다.

이 시점에서 주목해야 할 한 가지 중요한 점은 확인되지 않은 예외는 모두 RuntimeException 클래스의 하위 클래스라는 것입니다. 이 기사의 뒷부분에서 확인된 예외와 확인되지 않은 예외에 대해 더 자세히 이야기할 것입니다. 그러나 그 전에 혼동이 없도록 오류와 예외가 작동하는 방식이 본질적으로 어떻게 다른지 살펴보겠습니다.

Java의 오류 및 예외 – 어떻게 다릅니까?

Java 프로그래밍 언어의 공식 문서에서는 오류를 Java 프로그래밍 중에 발생하는 오류를 "합리적인 응용 프로그램에서 잡아내려고 해서는 안 되는 심각한 문제를 나타냅니다."라고 말합니다. 오류의 심각성은 이 진술의 자세에서 분명합니다. 분명히 이것은 코드를 리팩토링하거나 Java 애플리케이션 아키텍처를 수정하지 않고는 복구할 수 없는 프로그램이 직면할 수 있는 일련의 문제를 나타냅니다.

오류가 발생하는 Java 메서드를 살펴보겠습니다.

공개 정적 무효 인쇄(문자열 S) {

인쇄물);

}

위에서 언급한 코드에서 print() 메서드는 Java에서 스레드 스택에 대해 허용되는 최대 크기에 도달할 때까지 계속 반복해서 자신을 호출하는 재귀 메서드 역할을 합니다. 그 시점에서 다음과 같은 매우 일반적인 StackOverflowError와 함께 실행을 종료합니다.

스레드 "main"의 예외 java.lang.StackOverflowError

StackOverflowErrorExample.print(StackOverflowErrorExample.java:3)에서

위의 예제에서 볼 수 있듯이 메서드는 예제를 throw하지만 이 오류는 코드 자체에서 처리할 수 없습니다. 따라서 손상을 복구할 수 없기 때문에 프로그램은 단순히 실행을 종료합니다. 해결책으로 코드를 수정해야 합니다.

오류와 달리 예외는 합리적인 응용 프로그램에서 포착할 수 있는 조건을 나타냅니다. Java의 예외에는 컴파일 시 또는 런타임 중에 발생할 수 있는 문제가 포함됩니다. 이러한 예외는 모든 애플리케이션, 특히 테스트 및 디버깅 단계에서 다소 자주 발생합니다. 결과적으로 Java의 예외는 프로그램 자체 내에서 처리되어 코드가 자연스러운 흐름을 실행하도록 할 수 있습니다.

이제 Checked Exception과 Unchecked Exception이 무엇인지 살펴보고 Java의 Exception Hierarchy에 대해 조금 더 이야기해 보겠습니다.

자바의 체크된 예외와 체크되지 않은 예외

앞에서 언급했듯이 Java 프로그램의 예외는 컴파일 시간이나 런타임 중에 발생할 수 있습니다. 이것이 Java에 존재하는 두 가지 광범위한 예외 유형을 제공합니다. 다음은 이 두 가지 예외를 자세히 살펴보겠습니다.

컴파일 타임 예외

컴파일 시간에 발생하는 예외를 컴파일 시간 예외라고 합니다. 이는 Java 프로그램에서 명시적으로 확인하고 코드 자체에서 처리해야 하기 때문에 확인된 예외라고도 합니다. InterruptedException, IOException 등과 같은 클래스는 확인된 예외입니다.

확인된 예외를 처리할 수 있는 메서드를 살펴보겠습니다.

공개 무효 writeAFile() {

(BufferedWriter b_w = new BufferedWriter(new FileWriter("myFile.txt"))) {

b_w.write("테스트 중");

} catch(IOException ioe) {

ioe.printStackTrace();

}

}

보시다시피, 위 코드의 try 블록에는 두 개의 문이 있습니다.

  • 객체 인스턴스화 – BufferedWriter
  • 개체를 사용하여 파일에 쓰기

이 두 문은 모두 IOException을 throw할 수 있습니다. Checked Exception인 IOException은 호출자나 메서드에서 처리해야 합니다. 위의 예에서 메서드 자체 내에서 처리되는 예외를 볼 수 있습니다.

런타임 예외

컴파일 시간 동안 throw되는 컴파일 시간 예외와 달리 런타임 또는 확인되지 않은 예외는 본질적으로 런타임을 의미하는 "언제든지" throw될 수 있습니다. 그 결과 메서드는 이러한 확인되지 않은 예외를 처리하기 위해 명시적으로 catch-and-throw 블록을 사용할 필요가 없습니다. 확인되지 않은 런타임 예외를 상속하는 일부 클래스에는 NullPointerException, ArithmeticException 등이 포함됩니다.

NullPointerException unchecked Exception을 발생시키고 이전과 달리 코드 조각에서 처리되지 않는 Java 코드를 살펴보겠습니다. 여기있어:

공개 무효 writeToFile() {

시도 (BufferedWriter b_w = null) {

b_w.write("테스트");

} catch(IOException ioe) {

ioe.printStackTrace();

}

}

위의 메서드를 호출하면 BufferedWriter 개체가 null이기 때문에 프로그램에서 NullPointerException을 throw합니다. 다음은 예외의 내용입니다.

스레드 "main"의 예외 java.lang.NullPointerException

IOExceptionExample.writeToFile(IOExceptionExample.java:10)에서

IOExceptionExample.main(IOExceptionExample.java:17)에서

결론적으로

이것으로 Java의 예외 계층에 대한 이해에 대한 이 블로그의 끝 부분에 도달했습니다. 이것은 Java의 예외와 이를 처리하는 방법에 대한 포괄적인 내용이 결코 아님을 명심하십시오. 이를 위해 더 깊이 파고들어야 하고 가능한 다른 예외에 노출되어 작동 방식을 확인해야 합니다. 예외 처리를 알면 예외가 모든 응용 프로그램의 기본을 구성하므로 전체 스택 개발자로서 성공적인 경력을 쌓을 수 있습니다.

upGrad에는 전문 풀 스택 개발 과정 인 소프트웨어 개발의 Executive PG 프로그램 – 풀 스택 개발 전문화 – 이 과정에서 주로 풀 스택 개발에 중점을 두어 소프트웨어 개발의 모든 뉘앙스를 안내합니다. 코스를 확인하고 곧 좌석을 예약하는 것이 좋습니다!

1. Java에서 예외 계층의 맨 위에 있는 클래스는 무엇입니까?

Throwable 클래스는 Java에서 예외 계층의 맨 위에 있습니다.

2. Java에 존재하는 다양한 종류의 예외는 무엇입니까?

Java에는 확인되지 않은 예외와 확인된 예외가 있습니다. 확인된 예외는 컴파일 타임 예외라고도 하며, 확인되지 않은 예외는 런타임 예외라고도 합니다.

3. Java에서 예외는 어떻게 처리됩니까?

try-catch는 Java에서 예외를 처리하는 가장 쉬운 방법입니다. 실행하려는 코드의 주요 부분은 try 블록에 넣어야 하며, 하나 이상의 catch 블록은 코드에서 발생하는 모든 예외를 catch합니다. 이 메소드는 발생하는 모든 유형의 Java 예외를 감지합니다.