예외 Exception
Java에서 예외(Exception)은 프로그램 실행 중에 발생할 수 있는 오류를 말한다.
예외 처리를 통해 프로그램이 비정상적으로 종료되는 것을 방지할 수 있다.
예외 처리의 기본 구조
try {
// 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
// 예외를 처리하는 코드
} finally {
// 선택 사항: 항상 실행되는 코드 (자원 정리 등)
}
- `try`: 예외가 발생할 가능성이 있는 코드를 감싼다.
- `catch`: 특정 예외가 발생했을 때, 이를 처리하는 코드를 작성한다.
- `finally`: 예외 발생 여부와 관계없이 항상 실행되는 블록으로, 자원 정리 등에 사용된다.
예외 처리 예시
try {
int result = 10 / 0; // ArithmeticException 발생
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다: " + e.getMessage());
} finally {
System.out.println("예외 처리 완료");
}
`throw`와 `throws`
`throw`
- 목적: 특정 시점에 예외를 직접 발생시킬 때 사용
- 위치: 메서드 내부에서 사용
public class ThrowExample {
public static void main(String[] args) {
try {
checkAge(15); // 15는 유효하지 않은 나이
} catch (IllegalArgumentException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
public static void checkAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("나이는 18세 이상이어야 합니다."); // 예외 발생
}
System.out.println("나이는 적절합니다.");
}
}
`throws`
- 목적: 메서드가 특정 예외를 발생시킬 가능성이 있음을 호출자에게 알릴 때 사용
- 위치: 메서드 선언부
import java.io.*;
public class ThrowsExample {
public static void main(String[] args) {
try {
readFile("nonexistent.txt"); // 없는 파일 읽기 시도
} catch (IOException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
public static void readFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName); // IOException 발생 가능
file.read();
}
}
`throw`와 `throws` 차이점
특징 | `throw` | `throws` |
목적 | 특정 시점에 예외를 발생시킴 | 메서드가 예외를 던질 수 있음을 선언 |
사용 위치 | 메서드 내부 | 메서드 선언부 |
구문 | `throw new ExceptionType("Message");` | `pulbic void methodName() throws ExceptionType{}` |
의미 | 실행 중 예외를 직접 던짐 | 호출자가 예외를 처리해야 함을 알림 |
사용자 정의 예외
Java에서 기본 제공되는 예외 클래스 외에 특정 상황에 적합한 예외를 만들기 위해 사용
예외의 의미를 더 명확하게 하고, 코드 가독성과 유지보수성을 높일 수 있다.
Checked Exception vs Unchecked Exception
Checked Exception
- 컴파일 시점에서 처리해야 하는 예외
- `Exception` 클래스를 상속받아 만든다.
- 반드시 `try-catch` 또는 `throws`로 처리해야 한다.
- 예외 처리가 강제되므로, 안전하고 예측 가능한 코드를 작성할 수 있다.
- 예상 가능한 외부 오류에 사용한다 (`IOException`, `SQLException` 등)
- 예: 잘못된 은행 계좌를 입력한 경우
Unchecked Exception
- 런타임 시점에 발생하는 예외
- `RuntimeException` 클래스를 상속받아 만든다.
- 처리하지 않아도 컴파일 에러가 발생하지 않는다. (예외 처리가 선택인 상황에서 사용)
- 일반적으로 프로그래밍 오류나 로직 검증에 사용한다. (`NullPointerException`, `ArithmeticException`등)
- 예: 출금 시 잔액이 부족한 상황
'TIL (Today I Learned)' 카테고리의 다른 글
[TIL] SQL 윈도우 함수 (Window Function) (0) | 2025.01.14 |
---|---|
[Java] 상속(Inheritance)과 다형성(Polymorphism) 이해 (0) | 2025.01.10 |
[Java] 스택 자료구조: Stack과 Deque 비교 (0) | 2025.01.10 |
[TIL] Java 계산기 만들기 과제 회고 🤓✏️ (2) | 2025.01.09 |
[Java] 람다(Lambda)와 스트림(Stream) API 개념 및 예제 (0) | 2025.01.07 |