맞는데 왜 틀릴까..?

Java/Effective Java

[Effective Java] Item 77. 예외를 무시하지 말라

안도일 2023. 8. 13. 16:05

API 설계자가 메서드 선언에 예외를 명시하는 까닭은 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다.

해당 메서드 호출을 try문으로 감싼 후 catch 블록에서 아무 일도 하지 않으면 예외는 아주 쉽게 무시된다.

catch 블록을 비워두면 예외가 존재할 이유가 없어진다.

 

 

예외를 무시해야 할 때

 

FileInputStream을 닫을 때

  • 입력 전용 스트림이므로 파일의 상태를 변경하지 않았으니 복구할 것이 없으며, 스트림을 닫는다는 건 필요한 정보는 이미 다 읽었다는 뜻이니 남은 작업을 중단할 이유도 없다.

 

예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정하기로한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꾸자.

 

public class IgnoredExceptionExample {
    public static void main(String[] args) {
        try (FileInputStream fileInputStream = new FileInputStream("example.txt")) {
            // 파일 읽기 코드
            int data;
            while ((data = fileInputStream.read()) != -1) {
                // 파일 데이터 처리
                System.out.print((char) data);
            }
        } catch (IOException ignored) {
            // 예외 무시
            // 예외 무시의 이유에 대한 주석
            System.out.println("Exception occurred but ignored.");
        }
    }
}

 

 

예외를 적절히 처리하면 오류를 완전히 피할 수도 있고, 무시하지 않고 바깥으로 전파되게만 놔둬도 최소한 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게는 할 수 있다.