[백기선 자바] 예외 처리

[백기선 자바] 예외 처리

작성일자
Jul 27, 2023
태그
SUB PAGE
프로젝트
백기선 자바
책 종류

[자바 라이브 스터디] 9주차 - 예외 처리

1. Exception과 Error의 차이는?

  • 프로그램 에러
    • 정의) 프로그램 실행 중 오작동을 하거나 비정상적으로 종료되게 하는 원인
    • 종류) 발생 시점에 따라 구분
      • 컴파일 에러 : 컴파일 시 발생
      • 런타임 에러 : 실행 시 발생
      • 논리적 에러 : 실행은 되지만, 의도와 다르게 동작
  • 예외와 에러
    • 정의) 자바는 런타임 에러를 예외와 에러 두 가지로 구분함
    • 종류)
      • 예외(Exception)
        • 정의) 프로그램 코드에 의해 수습될 수 있는 다소 미약한 오류
      • 에러(Error)
        • 정의) 프로그램 코드에 의해 수습될 수 없는 심각한 오류
        • 예시) 메모리 부족, 스택오버플로우

2. 자바가 제공하는 예외 계층 구조

  • 특징)
    • 모든 클래스의 조상은 Object 클래스이므로 예외(Exception)와 에러(Error) 클래스 역시 Object 클래스의 자손들임

3. RuntimeException과 RE가 아닌 것의 차이는?

  • 정의) RuntimeException 클래스와 그 자손 클래스들을 RuntimeException 클래스들이라 하고, RuntimeException클래스들을 제외한 나머지 클래스들을 Exception 클래스들 이라 하자.
    • Exception 클래스와 RuntimeException클래스 중심의 상속 계층도
      • https://staticclass.tistory.com/69
  • 차이점)
    • RuntimeException 클래스들
      • 정의) 프로그래머의 실수로 발생하는 예외
      • 예시) ArrayIndexOutOfBoundException, NullPointerException, ClassCastException, ArithmeticException
    • Exception 클래스들
      • 정의) 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
      • 예시) FileNotFOundException, ClassNotFoundException, DataFormatException

4. 자바에서 예외 처리 방법 (try, catch, throw, throws, finally)

  • 정의) 프로그램 실행 시 발생할 수 있는 예외에 대비한 코드 작성
  • 목적) 프로그램의 비정상 종료를 막고, 정상적인 실행 상태를 유지하게 함
    • 발생한 예외 처리 못하면, 프로그램은 비정상적으로 종료되며 처리되지 못한 예외는 JVM의 예외처리기(UncaughtExceptionHandler)가 받아서 예외의 원인을 화면에 출력함
  • 방법)
    • try-catch문 이용
      • 구조)
        • 특징)
          • 예외의 종류와 일치하는 단 한 개의 catch 블럭만 수행됨
          • 발생한 예외의 종류와 일치하는 catch 블럭이 없으면 예외는 처리되지 않음
          • 괄호 생략 불가함
          • finally 블럭을 덧붙여 예외의 발생 여부에 상관 없이 실행되어야 할 코드 포함시킬 수 있음
            • 실행 순서는 예외가 발생한 경우엔 try → catch → finally 순, 예외가 발생하지 않은 경우엔 try → finally 순
      • try-with-resources문 이용
        • 구조)
          • 특징)
            • try-catch문의 변형으로 JDK1.7부터 추가됨
            • 자원 해제를 자동으로 해줌
              • 단, 모든 객체가 자동으로 반환되는 것은 아니고 AutoCloseable 인터페이스를 구현한 클래스만 자동으로 반환됨
            • 입출력과 관련된 클래스 사용할 때 유용함
              • 원래) finally 구문 사용
                • 변경) try-with-resources 구문 이용
            • 메서드에 예외 선언
              • 구조)

            5. 커스텀한 예외 만드는 방법

            • 평소에 아래와 같은 방식으로 만듦
              • ErrorCode Enum
                • ErrorResponse Dto
                  • CustomException
                    • CustomExceptionHandler