안녕하세요! 오늘은 자바 예외 처리에 대해 이야기해보려고 합니다. 프로그래밍을 하다 보면 예상치 못한 상황이 발생할 수 있습니다. 예를 들어, 파일을 읽으려는데 파일이 존재하지 않거나, 네트워크 연결이 끊기거나, 사용자가 잘못된 입력을 하는 경우 등이 있죠. 이러한 상황에서 프로그램이 비정상적으로 종료되지 않고, 우아하게 문제를 처리할 수 있도록 하는 것이 바로 예외 처리입니다. 자바에서는 이 예외 처리를 매우 잘 지원하고 있습니다.
예외(Exception)란 무엇인가?
예외는 프로그램 실행 중에 발생하는 예기치 않은 사건을 말합니다. 자바에서는 이러한 예외를 처리하기 위해 다양한 방법을 제공합니다. 예외는 크게 두 가지로 나뉩니다: 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception).
체크 예외(Checked Exception)
체크 예외는 컴파일 타임에 체크되는 예외로, 반드시 예외 처리를 해야 합니다. 예를 들어, 파일 입출력 작업을 할 때 발생하는 예외나 네트워크 관련 예외 등이 있습니다. 이러한 예외는 반드시 `try-catch` 블록으로 처리하거나, 메서드 시그니처에 `throws` 키워드를 사용해 던져야 합니다.
public void readFile(String filePath) {
try {
FileReader reader = new FileReader(filePath);
// 파일 읽기 작업
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
언체크 예외(Unchecked Exception)
언체크 예외는 런타임 예외(Runtime Exception)로, 컴파일러가 예외 처리를 강제하지 않습니다. 대표적으로 `NullPointerException`, `ArrayIndexOutOfBoundsException` 등이 있습니다. 언체크 예외는 주로 프로그래머의 실수나 논리적 오류로 발생합니다.
public void divide(int a, int b) {
int result = a / b; // b가 0일 경우 ArithmeticException 발생
}
예외 처리 방법
자바에서 예외를 처리하는 방법은 크게 네 가지입니다: `try-catch`, `try-catch-finally`, `try-with-resources`, `throws`.
1. try-catch
가장 기본적인 예외 처리 방법입니다. `try` 블록 내에서 예외가 발생할 가능성이 있는 코드를 작성하고, `catch` 블록에서 예외를 처리합니다.
public void divide(int a, int b) {
try {
int result = a / b;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
}
}
2. try-catch-finally
`finally` 블록은 예외 발생 여부와 상관없이 항상 실행됩니다. 리소스를 해제하거나 정리할 때 유용합니다.
public void readFile(String filePath) {
FileReader reader = null;
try {
reader = new FileReader(filePath);
// 파일 읽기 작업
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3. try-with-resources
자바 7부터 도입된 try-with-resources 구문은 리소스를 자동으로 해제합니다. 리소스는 `java.lang.AutoCloseable` 인터페이스를 구현해야 합니다.
public void readFile(String filePath) {
try (FileReader reader = new FileReader(filePath)) {
// 파일 읽기 작업
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
4. throws
메서드 시그니처에 `throws` 키워드를 사용해 예외를 던질 수 있습니다. 호출된 메서드에서 예외를 처리하도록 강제합니다.
public void readFile(String filePath) throws FileNotFoundException {
FileReader reader = new FileReader(filePath);
// 파일 읽기 작업
}
사용자 정의 예외
자바에서는 사용자가 직접 예외 클래스를 정의할 수 있습니다. 주로 체크 예외를 상속받아 사용하며, 필요에 따라 언체크 예외를 상속받을 수도 있습니다.
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public void someMethod() throws CustomException {
// 예외 발생 조건
throw new CustomException("사용자 정의 예외 발생");
}
예외 처리의 모범 사례
1. 구체적인 예외를 처리: 예외를 포괄적으로 처리하지 말고, 구체적인 예외를 처리하여 발생한 문제를 정확히 파악하고 대응합니다.
2. 적절한 예외 메시지 제공: 예외 메시지를 통해 발생한 문제를 명확히 전달합니다.
3. 예외 로깅: 예외 발생 시 로그를 남겨 추후 문제 해결에 도움을 줍니다.
4. 필요한 경우 예외 전환: 적절한 예외로 전환하여 상위 메서드에서 더 쉽게 처리할 수 있도록 합니다.
public void someMethod() {
try {
// 코드 실행
} catch (SpecificException e) {
throw new AnotherException("문제 발생", e);
}
}
이렇게 자바의 예외 처리에 대해 알아보았습니다. 예외 처리는 프로그램의 안정성과 신뢰성을 높이는 중요한 부분입니다. 여러분도 코드 작성 시 예외 처리를 꼼꼼히 하여, 예기치 않은 상황에서도 우아하게 대처할 수 있는 프로그램을 만들기 바랍니다.
'JAVA' 카테고리의 다른 글
Java final 정리해보기 (0) | 2024.06.30 |
---|---|
알고리즘 공부를 해보자 (0) | 2024.06.29 |
JAVA 참조 자료형 (0) | 2024.06.25 |
Java 이너클래스 (0) | 2024.06.24 |
Java 클래스와 객체 (0) | 2024.06.23 |