예외처리

심야·2023년 7월 13일
0

웹 개발

목록 보기
11/47

프로그램이 실행 중 어떤 원인에 의해 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 이를 발생시점에 따라 아래와 같이 3가지로 분류할 수 있다.

  • 컴파일 에러
    컴파일 시 발생하는 에러
  • 런타임 에러
    실행 시에 발생하는 에러
  • 논리적 에러
    실행은 되지만, 의도와 다르게 동작하는 것

Runtime Error

컴파일을 에러 없이 성공적으로 마쳤다 해서 프로그램 실행 시에도 에러가 발생하지 않는 것은 아니다. 컴파일러가 실행 도중에 발생할 수 있는 잠재적인 오류까지 검사할 수 없다. 그래서 컴파일은 잘 되었어도 실행 중에 에러에 의해 잘못된 결과를 얻거나 프로그램이 비정상적으로 종료될 수 있다.
이러한 에러를 런타임 에러라 부르며 자바에서는 실행 시 발생할 수 있는 프로그램 오류를 에러(error)와 예외(exception), 두 가지로 구분한다.

  • 에러
    프로그램 코드에 의해서 수습될 수 없는 심각한 오류
  • 예외
    프로그램 코드에 의해서 수습될 수 있는 미약한 오류

예외 클래스 계층구조

자바는 런타임 에러를 클래스로 정의하였다.

Error와 Exception 클래스는 모든 클래스의 조상인 Object 클래스의 자손들이다.
모든 예외의 최고 조상은 Exception 클래스이다.

  • Exception class (checkd exception)
    주로 사용자 동작에 의해서 발생하는 예외이다. 존재하지 않는 파일의 이름을 입력했던가, 입력한 데이터 형식이 잘못된 경우 등에서 발생한다.
  • RuntimeException class (uncheckd exception)
    주로 프로그래머 실수에 의해서 발생하는 예외이다. 배열 범위를 벗어나던가, 값이 null인 참조변수 멤버를 호출하는 경우 등에서 발생한다.

try-catch

try-with-resources

try-catch-finally 단점

  • 자원 반납에 의해 코드가 복잡해짐
  • 실수나 에러로 자원을 반납하지 못하는 경우 발생
  • 에러 스택 트레이스가 누락되어 디버깅이 어려움

try-with-resources 장점

  • 코드를 간결하게 만들 수 있음
  • 번거로운 자원 반납 작업을 하지 않아도 됨
  • 실수나 에러로 자원 반납을 못하는 경우를 방지할 수 있음
  • 모든 에러에 대한 스택 트레이스를 남길 수 있음
profile
하루하루 성실하게, 인생 전체는 되는대로.

0개의 댓글