Back-End/Java
13. 예외 처리(Exception Handling)
Yerin Thea Yoo
2026. 2. 12. 00:46
프로그램은 항상 정상적으로만 동작하지 않는다.
파일이 없을 수도 있고, 입력 값이 잘못될 수도 있으며, 네트워크 연결이 끊길 수도 있다.
이처럼 프로그램 실행 중 발생하는 오류 상황을 예외(Exception)라고 한다.
Java는 예외를 클래스 형태로 관리한다.
1. 예외와 오류의 차이
Java의 최상위 클래스는 Throwable이다.
Throwable
├── Error
└── Exception
1) Error
- 시스템 레벨 오류
- 복구 불가
- 개발자가 처리하지 않음
ex. OutOfMemoryError
2) Exception
- 프로그램 실행 중 발생 가능
- 개발자가 처리 가능
- 우리가 다루는 대상
2. 체크 예외 vs. 언체크 예외
Exception은 두 종류로 나뉜다.
1) 체크 예외(Checked Exception)
- 컴파일 단계에서 확인
- 반드시 처리해야 함
ex.
- IOException
- SQLException
2) 언체크 예외(Unchecked Exception)
- RuntimeException 하위 클래스
- 컴파일 시 강제하지 않음
ex.
- NullPointerException
- ArrayIndexOutOfBoundsException
- IllegalArgumentException
3. try-catch문
예외를 직접 처리하는 구조
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.printIn("0으로 나눌 수 없음");
}
동작
- try 블록 실행
- 예외 발생 시 catch로 이동
- 해당 타입과 일치하는 catch 실행
4. finally
항상 실행되는 블록
try {
// 실행
} catch (Exception e) {
//예외 처리
} finally {
//항상 실행
}
주로
- 자원 해제
- 파일 닫기
- DB 연결 종료
5. throws
예외를 직접 처리하지 않고 호출한 곳으로 넘긴다.
void readFile() throws IOException{
// 파일 처리
}
예외 책임을 상위 호출자에게 위임한다.
6. throw
직접 예외를 발생시킨다.
if (age < 0) {
throw new IllegalArgumentException("나이는 음수 불가");
}
7. 사용자 정의 예외
필요에 따라 직접 예외 클래스를 만들 수 있다.
class InvalidAgeException extends Exception {
public InvalidAgeException(String message) {
super(message);
}
}
사용
throw new InvalidAgeException("잘못된 나이");
8. try-with-resources
Java 7부터 도입된 자원 자동 해제 문법
try (BufferedReader br = new BufferedReader(new FileReader("a.txt"))) {
// 사용
}
AutoCloseable 구현 객체는 자동으로 close() 호출된다.
9. 예외 처리 전략
실무에서 중요한 것은 "어디서 처리할 것인가"이다.
1) 낮은 레벨
- 예외를 throws로 던짐
2) 상위 레벨
- 공통 처리(로깅, 사용자 메세지)
3) RuntimeException 활용
- 비즈니스 로직 예외는 언체크 예외로 처리하는 경우 많음