본문 바로가기
IT/Java

Error, Checked Exception, Unchecked Exception 비교

by 성준하이 2023. 2. 14.
반응형

포스팅 시작 앞에 에러와 예외에 대해서 먼저 비교를 해보고 시작하려고 한다.

  • Error란
    시스템 레벨에서 발생하는 심각한 수준의 오류를 뜻하며 개발자가 미리 예측하여 처리할 수 없기에 개발 시 예외 처리에 신경 쓰지 않아도 되는 부분이다.
  • Exception이란
    로직 상에서 발생하는 오류로 개발자 구현한 코드에서 발생하여 예외를 예측할 수 있으며 상황에 맞게 처리할 수 있다.

 

예외 클래스들은 최상위 클래스인 Object를 상속받은 Throwable이라는 클래스를 기반으로 Error와 Exception 클래스로 나뉘며 이때 Exception 클래스는 RuntimeException 상속 여부에 따라 Checked Exception과 Unchecked Exception으로 나뉜다.

 

그래서 예외라고 하면 크게 Error , Checked Exception, Unchecked Exception을 생각하면 된다.

그림으로 보면 아래와 같다.

 

그렇다면 또 여기서 Exception 두가지에 대해서 비교를 해보면

  Checked Exception UnCheckedException
앱에서 예외 처리 여부 필수 선택
예외 확인 시점 컴파일이 안됨 런타임 중 에러 발생
대표적인 클래스 Exception을 상속 받는 클래스중 RuntimeException을 제외한 모든 예외 클래스

IOException
SQLException
RuntimeException을 상속받는 모든 클래스

NullPointerException
IndexOutOfBoundException

 

예외 처리 방법 

예외에 대해서 다뤄봤는데 그럼 예외 처리하는 법에 대해서 기술해보려고 한다.

 

  • 1. 예외 복구
    소스
    public static void main(String[] args) throws IOException {
        byte[] list = {'a', 'b', 'c'};
        try {
            System.out.write(list);
        } catch (IOException e) {
            // 여기서 뭔가를 처리하는 로직을 넣어준다.
        } }
    trycatch로 구현하여 예외처리를 하며 예외 발생시 실행할 코드를 적어준다.

 

  • 2. 예외 회피
    소스
    public static void main(String[] args) throws IOException {
         byte[] list = {'a', 'b', 'c'};
         System.out.write(list[4]);
    }
    클래스에 throws 를 추가하여 해당 예외 처리를 한다.

 

  • 3. 예외 전환
    소스
    public static void main(String[] args) {
        byte[] list = {'a', 'b', 'c'};
        try {
            System.out.write(list);
        } catch (IOException e) {
            throw new RuntimeException("list를 읽지 못했습니다.");
        }
    }
    이렇게 runtimeException 을 상속받아 에러 처리를 한다.

 

반응형

댓글