체크 예외와 언체크 예외의 차이점은 무엇인가요?
체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception)는 자바의 예외 처리 메커니즘에서 중요한 개념입니다.
이 두 가지 예외는 예외 처리 방식과 컴파일러의 검사 여부에서 차이가 있습니다.
1. 체크 예외 (Checked Exception) - 정의: 컴파일 시점에 예외 처리를 강제하는 예외입니다.
- 특징: - 컴파일러가 메서드 내에서 발생 가능한 체크 예외를 반드시 처리(try-catch 문으로 감싸거나 throws 선언)하도록 요구합니다.
- 주로 외부 자원 접근, 파일 입출력, 네트워크 작업 등에서 발생할 수 있는 예외입니다.
- 예시: IOException, SQLException, ClassNotFoundException - 사용 사례: - 예외가 발생할 가능성이 높고, 호출자가 반드시 예외 상황을 인지하고 처리해야 할 때 사용합니다.
- 코드 예시: ```java public void readFile() throws IOException { FileReader file = new FileReader("file.txt"); // 파일읽기 관련 작업 수행 } ``` 2. 언체크 예외 (Unchecked Exception) - 정의: 컴파일 시점에 예외 처리가 강제되지 않는 예외입니다.
주로 런타임 예외(RuntimeException 및 그 하위 클래스)입니다.
- 특징: - 컴파일러가 처리 여부를 검사하지 않으며, 필요할 경우 선택적으로 try-catch로 처리할 수 있습니다.
- 보통 프로그래밍 오류, 논리적 버그, 잘못된 API 사용 등에서 발생합니다.
- 예시: NullPointerException, ArrayIndexOutOfBoundsException, IllegalArgumentException - 사용 사례: - 호출자가 반드시 예외를 처리하지 않아도 되고, 예외가 발생하면 주로 버그를 찾아 수정해야 하는 경우에 사용합니다.
- 코드 예시: ```java public int divide(int a, int b) { return a / b; // b가 0이면 ArithmeticException 발생 } ``` 요약 | 구분 | 체크 예외 (Checked Exception) | 언체크 예외 (Unchecked Exception) | |----------------|------------------------------------------|-----------------------------------------| | 상속 구조 | Exception 클래스 직접 상속 (RuntimeException 제외) | RuntimeException 및 그 하위 클래스 | | 컴파일러 검사 | 예외 처리(try-catch 또는 throws) 반드시 필요 | 예외 처리 강제하지 않음 | | 발생 원인 | 외부 자원, 환경 문제 등 | 프로그래밍 오류, 논리적 버그 등 | | 예시 | IOException, SQLException | NullPointerException, IllegalArgumentException | 체크 예외는 개발자가 반드시 예외 상황에 대비하도록 강제하는 반면, 언체크 예외는 프로그래밍 실수 등으로 런타임에 발생하며 선택적으로 처리할 수 있습니다.
상황에 따라 적절한 예외 유형을 사용하여 코드의 안정성과 가독성을 높이는 것이 중요합니다.