[Java] Exception

Junseo Kim·2021년 2월 23일
0

[Java]자바 기초

목록 보기
34/35

Exception

checked exception(compile time exception): 확인을 해야하는 예외. 본인이 처리하든지, 부모나 클라이언트에게 다시 던져줄지 결정. 무시할 수 없음. 무시하면 컴파일 에러 발생. Exception 상속

unchecked exception(run time exception): 컴파일 시점에 예외처리했는지 확인하지 않음. 책임을 클라이언트에 넘긴다. RuntimeException 상속.

언제 checked를 쓰고 언제 unchecked를 써야할까?

  • 호출하는 메소드가 Exception을 활용해 무엇인가 의미 있는 작업을 할 수 있다면 Checked Exception
  • 치명적인 경우 Checked Exception
  • 라이브러리나 프레임워크 등을 개발한다 Checked Exception 고려
  • 만약 호출하는 메소드가 Exception을 catch해 예외 상황을 해결하거나 문제를 해결할 수 없다면 Unchecked Exception
  • 명확하지 않다면 Unchecked Exception

tip

catch에서 발생한 에러는 그다음 catch에서 잡을수없다

try {
    throw new CustomException();
} catch(CustomException e) {
    throw new CustomTwoException();
} catch(CustomTwoException e) {
    여기서 CustomTwoException을 잡아줄 수 없다!
}

4가지 예외처리 방법

복구: 정상 상태로 되돌려 놓는 방법.

// 복구
void method() {
    try {
        call();
    } catch(CallException e) {
        otherCall();
    }
}

회피: 예외처리를 담당하지 않고, 호출한 곳으로 예외를 던져주는 것

// 회피
void method() throws CallException {
  call();
}

전환: 발생한 예외를 잡아 적절한 예외로 다시 던져주는 것

// 전환
void method() throws CallException {
  try {
    call();
  } catch (CallException e) {
    throw new OtherException();
  }
}

무시: 예외 무시

// 무시
void method() {
  try {
    return call();
  } catch (CallException ignored) { }
}

표준 예외

  • IllegalArgumentException: null이 아닌 인자의 값이 잘못된 경우. 메소드를 호출할 때 인자로 잘못된 값을 넘기는 경우.

  • IllegalStateException: 객체 상태가 메서드 호출을 처리하기에 적절하지 않은 경우.

  • NullPointException: null을 받으면 안 되는 인자에 null이 전달된 경우.

  • IndexOutOfBoundsException: 인덱스 허용 범위를 벗어난 경우.

  • ConcurrentModificationException: 병렬적 사용이 금지된 객체에 대한 병렬 접근이 탐지 된 경우.

  • UnsupportedOperationException: 객체가 해당 메서드를 지원하지 않는 경우.

  • ArithmeticException: 비정상 계산을 한 경우.(ex. 어떤 수 / 0)

  • NumberFormatException: Null이나 잘못된 값을 어떤 수로 형변환 한 경우.

0개의 댓글