● 오늘의 ISSUE
예외란 무엇이고, 처리방법, 예외 처리하면 좋은 이유 등 여러가지 예외처리에 대해 알아가보자.
● 예외처리
◈. 예외(Exception)란?
- 예외는 프로그램 실행 중에 발생하는 오류로, 프로그램의 정상적인 흐름을 방해하는 하나의 사건.
- Java에서 예외는 Throwable 클래스를 상속받아 두 가지 유형으로 나뉨.
- Checked Exception: 컴파일 시점에서 예외 처리를 강제하는 예외 (예: IOException, SQLException).
- Unchecked Exception (RuntimeException): 실행 시점에서 발생하며, 예외 처리가 강제되지 않는 예외 (예: NullPointerException, ArrayIndexOutOfBoundsException).
◈. 에외 처리 구문
- Java에서 예외 처리는 try-catch-finally 구문을 사용하여 수행합니다.
try {
// 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
// 예외 발생 시 처리 코드
} finally {
// 항상 실행되는 코드 (선택적)
}
※ 코드 설명
- try : 예외가 발생할 수 있는 코드를 작성.
- catch : 예외가 발생하면 해당 예외를 처리하는 블록이고 여러 개의 catch 블록을 사용하여 다양한 예외를 처리 가능.
- finally : 예외 발생 여부와 상관없이 항상 실행되는 블록. 리소스 해제 코드가 주로 여기에 위치.
▶ 실제 코드 사용 예시
try {
int result = 10 / 0; // ArithmeticException 발생
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다."); // 예외 처리
} finally {
System.out.println("이 코드는 항상 실행됩니다.");
}
◈. 예외 전파(Exception Propagation)
- 메서드에서 예외가 발생하고, 해당 메서드에서 예외를 처리하지 않으면, 예외는 호출된 메서드로 전파됨.
- 메서드에 throws 키워드를 사용하여 호출자에게 예외 처리를 위임 가능.
예시)
public void method() throws IOException {
throw new IOException("입출력 예외 발생");
}
◈. 사용자 정의 예외
- Java에서는 필요에 따라 개발자가 직접 예외 클래스를 정의할 수 있고, 사용자 정의 예외는 Exception 클래스를 상속받아 작성.
예시)
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
public class Test {
public void checkValue(int value) throws MyException {
if (value < 0) {
throw new MyException("음수는 허용되지 않습니다.");
}
}
}
◈. 예외 처리의 좋은 습관
- 구체적인 예외를 먼저 처리하고, 범용 예외는 나중에 처리하는 것이 좋음
- catch 블록에서 너무 많은 예외를 처리하는 것은 피하고, 특정 예외에 대한 적절한 처리를 설계하는 것이 !중요!.
- finally 블록은 자원 해제 (파일 닫기, 데이터베이스 연결 종료 등)와 같은 작업에 유용함.
- 예외 메시지를 사용자에게 명확하게 전달하거나 로깅하여 문제의 원인을 쉽게 파악할 수 있도록 해야함.
정리
- Java에서 예외 처리는 프로그램이 예기치 않게 종료되는 것을 방지하고, 오류를 안전하게 처리하는 메커니즘.
- try-catch-finally 구조를 사용하여 예외를 처리하고, 필요시 throws를 통해 예외를 호출자에게 전파할 수 있음.
- 좋은 예외 처리는 오류를 최소화하고, 프로그램의 안정성을 높이는 데 기여함.
TIP
*** 다중 예외 처리 간소화 (Multi-catch 사용)
>>> 여러 종류의 예외를 한 번에 처리할 수 있습니다. 중복 코드를 줄일 수 있는 좋은 방법입니다.
*** try-with-resources 사용 (자원 자동 해제)
>>> Java 7부터 제공되는 try-with-resources 구문을 사용하면,
finally 블록 없이도 자원을 자동으로 해제할 수 있습니다.
'JAVA' 카테고리의 다른 글
(JAVA) Wrapper 기본 개념 이해하기 (0) | 2024.09.23 |
---|---|
(JAVA) Generics 개념 이해하기 (0) | 2024.09.20 |
(JAVA) 다중상속과 인터페이스 알아보기 (0) | 2024.09.20 |
(JAVA) 추상클래스의 개념 + instanceof 이해하기 (0) | 2024.09.20 |
(JAVA) 접근 제어자와 오버라이드 개념 (0) | 2024.09.20 |