Java & Spring/Java

예외 처리 문법

승주우에요 2026. 1. 7. 21:06

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