Checked Exception과 Unchecked Exception

Kkd·2024년 11월 26일
0

매일메일 개념정리

목록 보기
10/93

Checked Exception과 Unchecked Exception

Java에서는 예외(Exception)를 두 가지 유형으로 구분합니다.
이는 예외 처리의 강제성과 관련이 있습니다.


1. Checked Exception

  • 정의:
    컴파일 타임(Compile-time)에 반드시 처리해야 하는 예외.

    • 예외 처리를 강제로 요구하기 때문에, 메서드 호출 시 try-catch 블록으로 처리하거나, 메서드 선언에 throws 키워드를 사용여 호출자에게 예외를 위임해야 컴파일 오류가 발생하지 않습니다.
  • 특징:

    • 의무적인 예외 처리가 요구됨.
    • 주로 외부 환경(파일, 네트워크 등)과 상호작용할 때 발생하는 예외.
    • 예외를 처리하지 않으면 코드가 컴파일되지 않음.
  • 대표적인 예:

    • IOException: 파일 입출력 시 발생.
    • SQLException: 데이터베이스 작업 시 발생.
    • ClassNotFoundException: 클래스 로딩 실패 시 발생.
  • 예제 코드:

    import java.io.*;
    
    public class CheckedExample {
        public static void main(String[] args) {
            try {
                FileReader reader = new FileReader("example.txt"); // Checked Exception 발생 가능
            } catch (FileNotFoundException e) {
                System.out.println("파일이 존재하지 않습니다.");
            }
        }
    }

2. Unchecked Exception

  • 정의:
    런타임(Runtime)에 발생하며, 컴파일러가 예외 처리를 강제하지 않는 예외.
    일반적으로 프로그래머의 실수나 코드 오류로 인해 발생.

    • 처리 여부는 개발자의 선택에 달려있음.
  • 특징:

    • 예외 처리(try-catch 또는 throws)가 선택 사항.
    • 프로그래머의 실수(버그)나 논리 오류로 인해 주로 발생.
    • 런타임에 발생하므로, 테스트 및 디버깅으로 발견해야 함.
  • 대표적인 예:

    • NullPointerException: 참조가 없는 객체를 사용하려고 할 때 발생.
    • ArrayIndexOutOfBoundsException: 배열 인덱스가 범위를 벗어날 때 발생.
    • ArithmeticException: 0으로 나누기 등 산술 오류 시 발생.
    • IllegalArgumentException: 메서드에 잘못된 인자를 전달할 때 발생.
  • 예제 코드:

    public class UncheckedExample {
        public static void main(String[] args) {
            int[] numbers = {1, 2, 3};
            System.out.println(numbers[5]); // ArrayIndexOutOfBoundsException 발생
        }
    }

3. Checked vs Unchecked 비교

특징Checked ExceptionUnchecked Exception
발생 시점컴파일 타임런타임
처리 강제 여부처리 강제 (try-catch or throws)처리 선택
발생 원인외부 환경 문제프로그래머의 실수나 논리 오류
대표적인 예IOException, SQLExceptionNullPointerException, ArithmeticException

4. Checked Exception을 Unchecked로 변환

  • Checked Exception을 처리하기 복잡한 경우, Unchecked Exception으로 변환하여 전파할 수 있습니다.

  • 예제:

    public class ExceptionConverter {
        public static void main(String[] args) {
            try {
                throwCheckedException();
            } catch (Exception e) {
                throw new RuntimeException(e); // Checked -> Unchecked로 변환
            }
        }
    
        public static void throwCheckedException() throws Exception {
            throw new Exception("Checked Exception 발생");
        }
    }

5. 언제 어떤 예외를 사용해야 할까?

  1. Checked Exception:

    • 복구 가능한 문제를 나타낼 때 사용.
    • 예를 들어, 파일이 없는 경우 대체 파일을 시도하거나 경고 메시지를 표시하는 경우.
  2. Unchecked Exception:

    • 프로그래머의 코드에 잘못된 논리나 실수가 있을 때 사용.
    • 예를 들어, null 체크 없이 객체를 사용한 경우.

6. Java 표준 예외 계층

  • Checked ExceptionException 클래스를 직접 상속.
  • Unchecked ExceptionRuntimeException 클래스를 상속.
java.lang.Object
   ↳ java.lang.Throwable
       ↳ java.lang.Exception (Checked Exception)
           ↳ java.lang.RuntimeException (Unchecked Exception)

7. Error와 Exception의 차이

Error는 주로 JVM에서 발생하는 심각한 문제로, OutOfMemoryError, StackOverflowError 등 시스템 레벨에서 발생하는 오류입니다. 이는 일반적으로 프로그램에서 처리하지 않으며, 회복이 어려운 오류에 속하며, 애플리케이션 코드에서 복구할 수 없는 심각한 문제를 나타냅니다.

반면, Exception은 프로그램 실행 중 발생할 수 있는 오류 상황을 나타냅니다. 대부분의 경우 회복 가능성이 있으며, 프로그램 내에서 예외 처리를 통해 오류 상황을 제어할 수 있습니다. Exception은 다시 Checked Exception과 Unchecked Exception으로 나눌 수 있습니다.


요약

  • Checked Exception은 컴파일 타임에서 처리 강제를 통해 외부 환경 문제를 다룹니다.
  • Unchecked Exception은 주로 프로그래머의 실수나 버그로 인해 발생하며, 런타임에서 처리합니다.
    적절한 예외를 선택하여 코드의 안정성과 가독성을 높이는 것이 중요합니다.

추가 학습 자료

profile
🌱

0개의 댓글