Exception, Error

Byung Seon Kang·2022년 8월 2일
0

java

목록 보기
1/1

서론

  • java의 stack trace를 보면서 exception이 무엇으로 처리되는지, 처리되는 과정은 어떻게 되는지 궁금해서 찾아보기 시작.

Error vs Exception

Error

  • 시스템에 비정상적인 상황이 생겼을 때 발생한다. 시스템레벨에서 발생하므로 심각한 수준의 오류. 개발자가 미리 예측하여 처리할 수 없으므로 애플리케이션에서 오류에 대한 처리를 신경 쓰지 않아도 됨.
    -> 시스템에 변화를 주어 문제를 해결해야 함.

Exception

  • 개발자가 구현한 로직에서 발생. 즉, 예외는 발생할 상황을 미리 예측하여 처리가 가능. 예외를 구분하고 그에 따른 처리 방법을 명확히 알고 적용하는 것이 중요하다.

Throwable class 구조

  • 여기서 중요한 것은 CheckedException과 Unchecked Exception(Runtime Exception)

CheckedException

  • RuntimeException을 제외한 모든 클래스가 여기에 속함.
    • 반드시 예외 처리가 필요
    • 컴파일단계에서 확인한다.
    • 예외발생시 트랜잭션이 roll-back하지 않음.
    • Exception의 상속받는 하위 클래스 중 Runtime Exception을 제외한 모든 예외를 말함.
      • IOException
      • SQLException
    • Try,Catch문, throw로 처리해줘야함.

UncheckedException

  • RuntimeException과 그의 자식클래스
    • 명시적인 처리를 강제하지 않는다.
    • 실행단계에서 처리
    • roll-back을 함.
    • RuntimeException 하위 예외들
      • NullPointerException
      • IllegalArgumentException
      • IndexOutOfBoundException
      • SystemException

Exception 자세하게

exception 정의 : program의 실행시간동안 일어나는 이벤트로서 program instruction들의 일반적인 플로우를 방해하는 것을 말한다.

  • 메소드 내부에서 exception이 발생하면, 메소드는 "object"를 생성하고 runtime system으로 넘겨준다. 이때 이 "object"를 exception object라고 부른다.
    • exception에 대한 정보(타입, 발생 당시 program의 state)등을 담고 있음.
    • exception object를 생성하고 runtime system으로 넘겨주는 작업을 throwing an exception 이라고 부른다.

-> runtime system은 JVM을 말하는듯 합니다.

exception handler 탐색과정

  • method가 throw exception을 하고나면, runtime system은 이를 처리할 수 있는 무언가를 찾는다.
    • 이 exception을 처리할 수 있는 "무언가"의 집합은 오류가 발생한 메서드에 도달하기 위해 호출된 메서드의 정렬된 목록중 일부
    • 호출된 메서드의 정렬된 목록은 call stack으로 알려져 있다
  • runtime system은 exception handler라고 불리는 code block을 가진 메소드를 찾기 위해 call stack을 탐색한다.
  • 이 탐색은 exception이 발생한 메소드로부터 시작되어 메소드가 호출된 지점까지 call stack을 통해 거꾸로 거슬러 올라간다.
  • 적절한 handler를 찾으면, runtime system은 exception을 handler에 전달한다.
    • 여기서 적절한 handler는 throw된 exception object의 type을 다룰 수 있는 것을 말한다.
    • 선택된 exception handler를 catch the exception이라고 함.
    • runtime system이 call stack의 모든 메서드를 찾아봐도 적절한 exception handler를 찾지 못하게 되면, runtime system이(결론적으로는 프로그램이) 종료된다.

참고

profile
왜 필요한지 질문하기

0개의 댓글