kmg28801 / effective-java

2 stars 0 forks source link

10장. 예외 #9

Open kmg28801 opened 3 months ago

kmg28801 commented 3 months ago

아이템 69. 예외는 진짜 예외 상황에만 사용하라

아이템 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라

public class CheckedExample {
    public static void main(String[] args) {
        try {
            FileReader file = new FileReader("test.txt");
            BufferedReader fileInput = new BufferedReader(file);
            for (int counter = 0; counter < 3; counter++) 
                System.out.println(fileInput.readLine());
            fileInput.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class UncheckedExample {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        System.out.println(arr[5]); // This will throw ArrayIndexOutOfBoundsException
    }
}

아이템 71. 필요 없는 검사 예외 사용은 피하라

아이템 72. 표준 예외를 사용하라

  1. 파일 크기 및 네트워크 대역폭 직렬화된 객체의 크기: 자바 직렬화는 효율성이 떨어질 수 있으며, 직렬화된 데이터가 상당히 큰 파일이나 데이터 스트림을 생성할 수 있습니다. 이는 저장 공간을 많이 차지하고 네트워크 전송 시 대역폭을 많이 소모하게 됩니다 .

  2. 호환성 문제 버전 관리: 클래스의 버전이 변경되면(예: 필드 추가/삭제), 기존에 직렬화된 객체와의 호환성 문제가 발생할 수 있습니다. 이를 해결하기 위해 serialVersionUID를 사용하는데, 이는 여전히 관리가 복잡합니다 .

  3. 보안 문제 보안 취약점: 직렬화된 객체는 보안 위험을 내포할 수 있습니다. 예를 들어, 악의적인 사용자가 조작된 바이트 스트림을 보내 역직렬화하는 경우, 원하지 않는 객체나 데이터를 로드하여 보안 취약점이 발생할 수 있습니다 .

  4. 디버깅 어려움 디버깅과 유지보수의 어려움: 직렬화된 데이터는 사람이 읽을 수 없는 형태이기 때문에 디버깅이 어렵습니다. 또한, 직렬화에 문제가 발생하면 이를 추적하고 수정하는 것이 까다로울 수 있습니다 .

  5. 특정 환경 의존성 환경 의존성: 자바 직렬화는 자바 플랫폼에 종속적입니다. 다른 프로그래밍 언어나 시스템과의 상호 운용성을 제공하기 어렵습니다. JSON, XML, 프로토콜 버퍼(Protocol Buffers)와 같은 더 범용적인 데이터 포맷이 대안이 될 수 있습니다 .

아이템 73. 추상화 수준에 맞는 예외를 던져라

아이템 74. 메서드가 던지는 모든 예외를 문서화하라

아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라

아이템 76. 가능한 한 실패 원자적으로 만들라