자바에서 예외(Exception)는 프로그램 실행 중에 발생할 수 있는 오류 또는 예외적인 상황을 나타냅니다. 예외 처리(Exception Handling)는 이러한 예외 상황에 대처하는 방법을 제공하며, 프로그램의 안정성과 신뢰성을 높이는 데 중요한 역할을 합니다.
자바에서 예외는 두 가지 주요 종류로 나뉩니다.
1. 일반 예외(Exception)
Exception 클래스를 상속받는 예외 클래스로, 주로 프로그래머의 실수나 예상할 수 있는 예외 상황을 다룹니다.
2. 런타임 예외(Runtime Exception)
RuntimeException 클래스를 상속받는 예외 클래스로, 주로 프로그램 실행 중 발생하는 예외로서 미리 예측하기 어려운 경우에 해당합니다.
예외 처리의 기본 구조
자바에서 예외 처리는 try, catch, finally 블록을 사용하여 구현됩니다. 기본적인 구조는 다음과 같습니다.
try {
// 예외가 발생할 수 있는 코드
} catch (예외타입1 변수1) {
// 예외타입1에 대한 처리
} catch (예외타입2 변수2) {
// 예외타입2에 대한 처리
} finally {
// 항상 실행되어야 하는 코드 (예외 발생 여부에 관계없이)
}
예외 처리의 종류
1. try 블록
예외가 발생할 수 있는 코드를 감싸는 블록입니다.
2. catch 블록
특정 예외 타입에 대한 처리 코드를 제공하는 블록입니다. 여러 개의 catch 블록을 사용하여 여러 예외 타입을 처리할 수 있습니다.
3. finally 블록
예외 발생 여부에 관계없이 항상 실행되어야 하는 코드를 제공하는 블록입니다. 주로 리소스의 해제 등에 활용됩니다.
예외 처리의 예시
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ExceptionHandlingExample {
public static void main(String[] args) {
BufferedReader reader = null;
try {
// 파일 읽기 시도
reader = new BufferedReader(new FileReader("example.txt"));
String line = reader.readLine();
System.out.println("Read line: " + line);
} catch (IOException e) {
// IOException 처리
System.err.println("IOException: " + e.getMessage());
} finally {
// 항상 실행되어야 하는 코드 (리소스 해제 등)
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
System.err.println("Error closing reader: " + e.getMessage());
}
}
}
}
위의 예시에서는 파일을 읽는 도중 IOException이 발생할 수 있습니다. try 블록에서는 파일을 열고 읽는 코드가 있고, catch 블록에서는 예외가 발생할 경우의 처리를 수행합니다. finally 블록에서는 항상 실행되어야 하는 코드로서, 파일을 닫는 코드가 포함되어 있습니다.
예외 전파와 throws
메서드에서 발생한 예외를 해당 메서드를 호출한 곳으로 전파할 때는 throws 키워드를 사용합니다. 메서드 선언에서 throws를 사용하여 해당 메서드에서 발생할 수 있는 예외를 명시합니다.
public class Example {
public void readFile() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
// 파일 읽기 코드
reader.close();
}
public static void main(String[] args) {
Example example = new Example();
try {
example.readFile();
} catch (IOException e) {
// 예외 처리
System.err.println("IOException: " + e.getMessage());
}
}
}
위의 예시에서 readFile 메서드에서는 IOException이 발생할 수 있으며, 이 예외를 호출한 main 메서드에서 처리하도록 throws IOException를 메서드 선언에 추가하였습니다. 이렇게 함으로써 main 메서드에서는 해당 예외를 처리하거나, 상위 호출자로 전파할 수 있습니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 try-catch문 (0) | 2023.11.14 |
---|---|
자바 예외 클래스의 계층구조 (0) | 2023.11.14 |
자바 익명 내부 클래스 (0) | 2023.11.14 |
자바 지역 내부 클래스 (0) | 2023.11.14 |
자바 정적 내부 클래스 (0) | 2023.11.13 |