[Java] 에러(Error)와 예외클래스(Exception)

재영양·2024년 5월 22일
0

Study

목록 보기
14/14
  • 프로그래밍의 오류
    발생 시점에 따라 크게 3가지로 나눈다.

    • 컴파일 에러(compile-time error)
      컴파일 시 발생하는 오류

      • ex. 문법 오류(syntax error), 타입 체크 오류(type check error)
    • ⭐️ 런타임 에러(runtime error)
      실행 시 발생하는 오류

      • ex. 예외(exception), 에러(error)
    • 논리적 에러(logical error)
      실행은 되지만, 의도와 다르게 동작하는 오류
      = 버그

Error와 Exception 모두 Throwable 클래스를 상속받는다.

diagram

  • Error(에러)
    프로그램 코드에 의해 수습될 수 없는 예측 불가한 심각한 오류

    • 에러가 발생하면 프로그램이 종료된다.

    • 주로 JVM에서 발생하는 문제로, 애플리케이션에서 직접 처리하거나 복구할 수 없다.

    • 대표적인 에러

      • OutOfMemoryError
        메모리가 부족할 때
      • StackOverflowError
        스택 메모리가 부족할 때
  • Exception(예외)
    프로그램 코드에 의해 수습될 수 있는 예측 가능한 오류

    • 예외가 발생했을 때 프로그램이 종료될 수 있지만, 예외 처리 코드를 통해 정상적으로 실행을 계속할 수 있다.

    • 분류

      • Checked Exception - 컴파일 에러
        자바 소스를 컴파일하는 과정에서 발생하는 예외

        • Exception을 상속받는다.

        • 대표적인 컴파일 예외

          • IOException
            입출력 관련 예외
          • SQLException
            데이터베이스 관련 예외
          • ClassNotFoundException
            클래스를 찾을 수 없는 예외
      • Unchecked Exception - 런타임 에러
        Runtime Exception(실행 예외)이라고도 불리며, 실행 시 발생하는 예외

        • RuntimeException을 상속받는다.

        • 컴파일러가 체크를 하지 않기 때문에 오로지 개발자의 경험에 의해서 예외 처리를 해야 한다.

        • 대표적인 런타임 예외

          • NullPointerException
            null 값을 갖는 참조 변수로 객체 접근 시

            String str = null;
            System.out.println(str.length()); // NullPointerException
          • ArrayIndexOutOfBoundsException
            배열의 범위를 벗어난 인덱스로 배열에 접근 시

            int[] arr = new int[3];
            System.out.println(arr[3]); // ArrayIndexOutOfBoundsException
          • NumberFormatException
            숫자로 변환할 수 없는 문자열을 숫자로 변환 시

            String str = "abc";
            int num = Integer.parseInt(str); // NumberFormatException
          • ClassCastException
            상속/구현 관계가 아닌 클래스 간 형변환 시

            // Dog와 Cat은 Animal을 상속받는다.
            
            Animal animal = new Dog();
            Dog dog = (Dog) aninal;
            Cat cat = (Cat) animal; // ClassCastException

            instanceof 연산자를 사용하여 형변환 가능 여부를 먼저 확인해야 한다.

            if (animal instanceof Cat) { // boolean
              Cat cat = (Cat) animal;
            }

참고 자료 및 링크

0개의 댓글