테스트 코드, 예외 처리
예외 처리
korea-wongi
2024. 6. 9. 02:14
체크 예외
- RuntimeException을 상속하지 않은 예외
- 컴파일러가 체크하지 때문에 예외처리 코드가 필요
- IOException, SQLException 등이 있다.
언체크 예외
- RuntimeException을 상속한 예외
- 명시적인 예외처리가 필요하지 않다. 자동으로 예외를 발생시킨다.
- NullPointerException, ArrayIndexOutOfBoundsException 등이 있다.
예외 처리 방법
- 예외 복구
- 예외가 발생한 상황에 대응해서 정상적인 상황으로 복구하는 방법.
- 프로그램이 중단되지 않고 계속 실행할 수 있도록 한다.
- 예) 로그인 요청 > 입력 값 오류 > 재입력 요청
- 예외 회피
- 현재 메서드에서 예외를 처리할 수 없거나, 처리하는 것이 적절하지 않은 경우 상위 호출자에게 예외를 전달
- catch 한 예외를 그대로 throw 하는 것은 별 의미가 없다.
- 예외 전환
- 적절한 예외로 전환하는 것을 말한다.
- 사용자 정의 예외를 만들어 가독성, 세세한 예외 처리가 가능
- Exception으로만 처리를 하면 가독성이 떨어진다.
- 예) 회원을 찾을 수 없을 경우 : MemberNotFoundException 사용자 정의 예외를 만들어 사용
- 결론
- 복구, 회피, 전환 중 뭐가 중요하다 보다는 예외 처리를 적절하게 하는 것이 중요하다.
- 예외 케이스가 많은 것은 좋다고 생각한다고 한다. 처리를 제대로 못해서 사용자가 떠나면 안된다.
try-catch 안티패턴
- 막연한 예외처리
- 모든 예외를 exception으로 처리하면 어느 상황에 발생했는지 구분하기 어려울 수 있다.
- 너무 잦은 catch
- 컨트롤러에서도 쓰고, 서비스에서도 쓰고 하는 등
- 무의미한 에러 넘기기
- catch 로 예외를 잡고 내부에 다시 throw 던지는 코드
- 무의미한 에러 캐치
- catch로 예외 넣고 내부에 아무런 처리를 하지 않은 것!! 이것이 리얼 무의미다.
세세한 예외 처리 방안
- 단순히 HTTP 상태 코드(400, 200)만 리턴해서는 적절한 상황을 확인할 수 없습니다. 예외 처리 시에는 상태 코드와 함께 에러 코드 및 에러 세부 사항을 포함해야 합니다.
- 단순히 400, 200 만 리턴해서는 안된다. Status Code 만으로는 적절한 상황을 확인할 수 없음