본문 바로가기
개발/Java&Spring

Java에서의 예외 처리

by ahoy~ 2020. 10. 5.

예외의 종류와 특징

1. Error

java.lang.Error의 에러들입니다.

시스템에 비정상적인 상황(메모리 초과)이므로 애플리케이션 레벨에서 할 수 있는 것이 없습니다.

그러니 신경 노노

2. Exception의 언체크 예외(RuntimeException)

Try~Catch문으로 안잡아도 되는 예외입니다.(물론 잡아줘도 상관없다)

할당되지 않은 레퍼런스 변수를 사용하려고 할 때 발생하는 NullPointerException과 같은 것으로 미리 코드에서 체크한다면 피할 수 있는 것이다.(대부분 개발자의 부주의로 발생...)

3. Exception의 체크 예외

사용할 메소드가 체크예외를 던진다면 이를 catch문으로 잡든지, 아니면 다시 throws로 메소드 밖으로 던져야 한다.

밑의 그림이 Exception클래스의 구조이다

 

예외 처리 방법

1. 예외 복구

파일을 읽으려는 시도 중 IOException이 발생한 경우, 다른 파일을 읽도록 안내하는 방식으로 예외를 해결하는 것입니다.

결국 예외는 이러한 식으로 어디선가 해결해 주어야 합니다.

2. 예외처리 회피

예외처리를 자신이 하지 않고 자신을 호출한 쪽으로 던져버리는 것입니다.

무책임하게 던져버리기 보다는 자신을 호출한 쪽에서 처리하는 것이 확실할 때 던져야합니다.

3. 예외 전환

예외처리 회피와 달리 그냥 던지는 것이 아니라 예외상황에 대한 의미를 분명하게 해줄 수 있는 다른 예외로 바꿔줍니다.

새로운 사용자를 등록하려고 시도했을 때 같은 아이디 사용자가 있다면 JDBC는 SQLException을 던집니다.

DuplicateIdException과 같은 예외를 직접 만들어 던져주면 자신을 호출한 쪽에서 에러를 처리하거나 복구할 수 있게됩니다.

예외 처리 전략

  • 예외를 잡아서 아무런 조취를 취하지 않거나 의미 없는 throws 선언을 남발하는 것은 위험하다.
  • 예외는 복구하거나 예외 처리 오브젝트로 의도적으로 전달하거나 적절한 예외로 전환해야 한다.
  • 좀 더 의미 있는 예외로 변경하거나, 불필요한 catch/throws를 피하기 위해 런타임 예외로 포장하는 두 가지 방법의 예외 전환이 있다.
  • 스프링은 DataAccessException을 통해 DB에 독립적으로 적용 가능한 추상화된 런타임 예외 계층을 제공한다.
  • DAO를 데이터 액세스 기술에서 독립시키려면 인터페이스 도입과 런타임 예외 전환, 기술에 독립적인 추상화된 예외로 전환이 필요하다.

'개발 > Java&Spring' 카테고리의 다른 글

간단 Spring 동작 원리  (0) 2020.07.08

댓글