대왕판다
ESTP 하고재비로 살아가기
대왕판다
전체 방문자
오늘
어제
  • 분류 전체보기
    • 일상
      • 먹고재비
      • 생각대로
    • 개발
      • html css
      • 자바
      • 자바스크립트
      • 파이썬
      • 알고리즘
      • 북TIL
      • 네트워크
      • 객체지향개발

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 맛집
  • 백준
  • 상길북
  • 자바스크립트
  • 코딩
  • 노마드코더
  • 마이바티스
  • css
  • 클론코딩
  • 리액트
  • 파이썬
  • 노개북
  • 챌린지
  • 브루트포스
  • html
  • 알고리즘
  • 자바
  • 양산맛집
  • 양산
  • 타입스크립트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
대왕판다

ESTP 하고재비로 살아가기

개발

자바 - checked Exception, unchecked Exception

2022. 12. 22. 11:26

Exception?

  • Java object 의 Throwable 클래스에는 Error / Exception 클래스 존재한다.
  • Exception은 java.lang.Exception 클래스와 그 서브클래스들이 쓰이는 상황이다.
  • 이 예외들은 Checked Exception 과 Unchecked Exception 두 가지로 나눌 수 있다.
  • 언체크 예외(unchecked exception)은 RuntimeException을 상속한 것
  • 체크 예외는 그 이외의 예외들을 말한다.



Checked Exception 체크 예외

  • 체크 예외는 상술했듯 RuntimeException을 상속하지 않는 예외들이다.
  • 컴파일 단계에서 확인된다.
  • 복구가 가능한 예외들이기에 반드시 catch, throws를 통해 예외를 처리하는 코드를 함께 작성해야한다.
  • ClassNotFoundException, IOException, SQLException 등이 해당한다.

​


Unchecked Exception 언체크 예외

  • 런타임 예외라고도 부르는 언체크 예외들은 명시적인 예외 처리를 강제하지 않는다.
  • 따라서 unchecked exception인 것이다.
  • 실행 단계에서 확인된다.
  • 이들은 프로그램에 오류가 있을때 발생하도록 의도된 것들이다.
  • NullPointerException, illegalArgumentException, ArrayIndexOutOfBoundsException 등이 해당한다.



일반적인 예외 처리 방법들

  1. 예외복구

    1. 예외 복구의 핵심은 예외가 발생하여도 Application은 정상적으로 동작한다는 것.

    2. private void mayThrowExceptionLogic() {
          int maxTry = 20;
          while(maxTry --> 0) {
              try {
                  // ???Exception 이 Throw 될 수 가능성이 있는 로직
              // 성공 시 return, 해당 메소드 종료
              return ;
              } catch(???Exception e) {
                  // Error 로그 출력
              // 실패 로직 존재 시 원상 복구
              // 일정 시간 동안 대기
              } finally {
                  // 작업에 사용한 Resource 반환 및 정리
              }
          }
          // 최대 횟수 실패시 예외 Throw
          throw new MaxTryFailedException();
      }
  1. 예외 회피

    • 자신이 예외를 처리하지 않고 호출한 쪽으로 throw 한다.

    • 무분별하게 사용해선 안된다. 호출한 쪽에서 예외를 처리하는게 맞을 경우에만 사용한다.

    • private void mayThrowExceptionLogic() throws ???Exception {
          // 비즈니스 로직
      }
<br>
  1. 예외전환

    • 예외를 복구해 정상적 상태로 만들수없기 때문에 예외가 발생한 메소드 밖으로 던지는 방법이다.

    • 적절한 예외로 전환해서 던진다.

    • try {
          // Exception 발생 가능 로직
      }
      catch(???Exception e) {
          // Exception 로깅
              // 복구 로직
              throw CustomSpecificExceptionJustLikeNotAllowedUserException("이런상황~");
      }
  • /*
    1번은 예외를 던지는 경우, 예외의 이름을 보고 어떤 문제가 있는 예외인지 알 수 있게 해준다. 
    예를 들어, 사용자의 아이디가 겹치는 예외의 경우 일반적인 SQLException이 아니라, 
    DuplicatedUserIDException으로 던지게 되면, 호출한 쪽에서는 단순히 SQLException이 아닌, 사용자의 아이디가 겹쳐서 발생하게된 예외인지를 인식할 수 있게 된다.
    */
    
    /*
    2번은 복구 가능한 예외가 아닌경우, RuntimeException으로 포장해서 던지는 방법이다.
    이렇게 체크 예외를 언체크 예외인 RuntimeException으로 포장해서 던지는 경우, 
    불필요한 throws 구문이 줄게 된다.
    */

중요한건?

편한 길을 선택하지말고 어떤 방법으로 예외처리를 할지 고민하고 방법을 선택해야한다.

  • Catch에 e.printStackTrace / throw 를 남발하지 말고,

  • 로깅, 복구 로직 등을 추가한다.



Error?

  • 에러는 시스템에 비정상적 상황이 발생했을 경우 발생한다.
  • 메무리 부족이나 스택오버플로우처럼 복구할 수 없다.
  • 이러한 에러는 개발자가 예측하기 쉽지않고, 처리할 수 있지도 않다.

'개발' 카테고리의 다른 글

Git 사용중 로컬-원격 저장소간 충돌상황일때(변경 사항이 충돌하지 않을때)  (0) 2023.03.16
자바 서블릿에서의 session  (0) 2023.03.14
[북TIL] 파이썬 알고리즘 인터뷰 7장 배열  (0) 2022.08.11
데이터베이스의 병행제어기법  (0) 2022.07.16
인터페이스 모듈 연계 방식 EAI와 ESB  (0) 2022.07.14
    '개발' 카테고리의 다른 글
    • Git 사용중 로컬-원격 저장소간 충돌상황일때(변경 사항이 충돌하지 않을때)
    • 자바 서블릿에서의 session
    • [북TIL] 파이썬 알고리즘 인터뷰 7장 배열
    • 데이터베이스의 병행제어기법
    대왕판다
    대왕판다
    let's learn and roll!

    티스토리툴바