[TIL] Java - 예외처리

KwonSC·2021년 11월 11일
0

TIL - Java

목록 보기
5/5
post-thumbnail

예외 클래스

  • 예외 클래스의 분류
    • Checked Exceptions : 컴파일 시에 예외 처리를 해 주었는지 체크하는 Exception
    • Unchecked Exceptions : 프로그램 실행 중에 발생하는 Exception
  • 자부 발생하는 Exception 종류
    • 실행할 때 발생하는 Unchecked Exception 의 경우, 프로그래머의 부주의로 인한 버그인 경우가 많기 때문에 예외 처리보다는 코드 자체를 수정해야 하는 경우가 많다.
    • ArithmeticException
      • 산술 연산 중, 0 으로 나누었을 때 발생
    • NullPointerException
      • 참조 데이터형 변수의 값이 null 인데 객체에 접근하려고 하는 경우 발생
    • ArrayIndexOutOfBoundsException
      • 배열의 범위를 벗어난 인덱스에 접근하려고 할 때 발생
    • ClassCastException
      • 객체의 형 변환 시, 잘못된 클래스로 변환하려고 할 때 발생

try ~ catch ~ finally

  • 예외 처리 방법
try {
    // Exception이 발생할 가능성이 있는 구문
} catch (Exception_클래스_타입1 변수명) {
    // Exception이 발생했을 경우 수행해야 하는 문장 
} catch (Exception_클래스_타입2 변수명) {
    // Exception이 발생했을 경우 수행해야 하는 문장 
} finally {
    //반드시 수행해야 하는 문장
}
  • try

    • Exception 이 발생할 가능성이 있는 코드를 try 블록으로 감싼다.
    • try 블록 안에 있는 문장들은 Exception이 발생하지 않는 한, 모두 정상 수행된다.
    • Exception 이 발생하면, 즉시 발생한 Exception 객체를 catch 블록으로 전달한다.
  • catch

    • Exception 객체를 받아서, 예외 상황이 발생했을 때 수행할 일들을 작성해 준다.
    • 여러 가지 Exception 클래스 타입들 중, 발생 가능성이 있는 클래스 객체를 선언해 준다.
  • 여러 형태의 Exception이 발생시 try 블록 안의 코드에서 여러 개의 Exception이 발생할 가능성이 있을 때에는 catch 블록을 여러개 작성

    • 하위 클래스의 Exception 부터 상위 클래스의 Exception 순서로 작성
    • Exception이 발생하면 위에서부터 차례대로 검사하면서 알맞은 catch 블록을 찾아 수행
    • 제일 마지막에는 최상위 Exception 클래스를 작성하여 모든 예외사항을 처리할 수 있음
  • finally

    • try 블록 안 코드의 Exception 발생 유무와 상관 없이 반드시 수행해야 하는 문장
    • catch 블록이 모두 끝난 후 finally 블록을 작성

Throws

  • thorws 방법
public Return_Type 메소드명 (파리미터,..)
    throws Exception_Type1, Exception_Type2, .. {
        // 메소드 내용
}
  • try ~ catch 구문에서 catch를 여러 번 사용할 수 있듯이, throws 도 여러 개의 Exception을 던질 수 있다.

  • 강제로 Exception 발생시키기

    • 프로그래밍을 하다 보면, 조건문 등을 이용하여 예외 상황을 발생할 수 있다.

    • 강제로 Exception 을 발생시켜 예외 상황을 만들도록 할 수 있다.

throw new Exception()("Exception 발생 메세지");
throw Exception_객체;

사용자 정의 예외

  • 사용자 정의 예외

    • 사용자 정의 예외 클래스

      • 자바에서 제공하는 예외 클래스 만으로는 다양한 종류의 예외를 표현할 수 없다.
      • 기존에 정의된 예외 클래스를 상속받아 새로운 예외 클래스를 정의할 수 있다.
    • 사용자 정의 예외 클래스 선언

    • 사용자 정의 예외 클래스의 처리

    • 사용자 정의 예외를 처리하지 않으면?

0개의 댓글