1. try-catch-finally
기본 형태
try {
// 예외 발생 가능 영역
} catch (Exception e) {
// 특정 예외 처리
} finally {
// 항상 실행
}
예제 1 : 파일 읽기
try {
FileInputStream fis = new FileInputStream("data.txt");
// 파일 처리
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다.");
} finally {
System.out.println("파일 처리 종료");
}
2. try-with-resources
try (FileInputStream fis = new FileInputStream("data.txt")) {
// 파일 처리
} catch (IOException e) {
e.printStackTrace();
}
- AutoCloseable 구현 객체만 가능
- close() 자동 호출
- 자원 누수 방지
3. 다중 catch와 예외처리 순서
다중 catch
try {
readFile();
} catch (FileNotFoundException e) {
System.out.println("파일이 없습니다.");
} catch (IOException e) {
System.out.println("입출력 오류");
}
자식 -> 부모 순서로 예외 처리 실행해야 함. 반대면 컴파일 에러가 발생한다!!
4. throws: 처리 vs 위임
throws는 예외를 처리하지 않고 호출자에게 위임한다
public void readFile() throws IOException {
FileInputStream fis = new FileInputStream("data.txt");
}
- 여기서 해결 가능 -> try-catch
- 여기서 해결 불가 -> throws
5. 사용자 정의 예외 (Custom Exception)
의미 없는 예외 메시지는 코드 품질을 떨어뜨린다. 도메인에 맞는 예외 타입을 만들어야 함!!
public class InvalidAgeException extends RuntimeException {
public InvalidAgeException(String message) {
super(message);
}
}
if (age < 0) {
throw new InvalidAgeException("나이는 음수가 될 수 없습니다.");
}
6. 정리
- try-catch는 남용하면 독이 됨
- 예외는 숨기지 말고 의미를 드러내야 함
- Checked/ Unchecked 선택은 정책이다
- 좋은 예외 설계는 코드 가독성을 높인다
'Java & Spring > Java' 카테고리의 다른 글
| 예외 개념과 자바 예외 구조 (0) | 2026.01.07 |
|---|---|
| Enum의 개념과 사용 (0) | 2026.01.07 |
| 내부 클래스(Inner Class) (0) | 2026.01.07 |
| 추상화 (0) | 2026.01.07 |
| SOLID 원칙 (0) | 2026.01.06 |