작성
·
806
·
수정됨
1
에러 처리를 할 수 있는 방법들이 많아지니 어느 상황에 어느 코드를 작성해야하는지 생각이 많아져서 질문 남깁니다. 일단 제가 알고 있는 방법은
1. try,catch로 에러를 잡기
2.체크 에러를 런타임 에러로 변환해서 throw하지 않기
3. @ExceptionalHandler로 에러 처리하기
이렇게 세 가지를 강의를 통해 알게 됐습니다. 이러한 것들을 실무 때 어느 상황에서 써야 좋을 지 실무에서 오래 있던 김영한 이사님의 생각이 듣고 싶어서 질문 드립니다. 개인적으로는 그냥 interface의 구현체에서 try catch로 모든 에러를 잡으면 interface에서도 throw sqlExcpetion같이 메서드 이름에 적을 필요도 없으니 체크 에러를 런타임 에러로 변환할 필요도 없을 거라고 생각합니다. 그리고 @ExceptionalHandler의 사용 용도도 생각해봤는데 잘 모르겠습니다. @ExceptionalHandler를 사용하게 되면 체크 에러가 생기게 되면 메소드 이름에 throw를 해서 에러를 던져야하는데 그럼 체크 에러에 종속적이게 될 거라고 생각합니다. 그래서 try catch로 모든 걸 해결하면 되지 않을까? 라는 결론에 도달하게 됐습니다. 공부할수록 이 생각에서 확장이 안되는데 실무에서 김영한 이사님은 어느 식으로 하는 지 간단하게라도 알려주시면 감사할 것 같습니다.
답변 1
7
안녕하세요. 이호왕님
try-catch로 에러를 잡기 이 방법은 예외 발생 시 직접 처리하거나, 로깅하여 추후 분석할 때 사용하기 좋습니다. 다만, 이 방식으로 모든 예외를 처리하려고 하면 코드가 지저분해지고 관리가 어려워질 수 있습니다.
체크 에러를 런타임 에러로 변환해서 throw하지 않기 이 방법은 체크 에러를 런타임 에러로 변환하여 호출자에게 예외 처리의 책임을 위임할 수 있습니다. 이렇게 하면 호출자가 예외 처리에 필요한 컨텍스트를 갖추어 처리할 수 있으며, 굳이 메서드에 'throws'를 사용하지 않아도 됩니다. 하지만 이 경우에도 try-catch를 사용하여 변환 작업이 필요하므로 코드가 복잡해질 수 있습니다.
@ExceptionHandler로 에러 처리하기 이 방법은 주로 스프링 프레임워크에서 사용되며, 전역적으로 예외 처리를 할 때 유용합니다. @ExceptionHandler를 사용하면 특정 예외 유형에 대해 한 곳에서 처리할 수 있어 코드의 중복을 줄일 수 있습니다. 그러나 이 방식은 체크 예외를 처리하기 어렵고 주로 런타임 예외 처리에 사용됩니다.
실무에서는 이 세 가지 방법을 상황에 맞게 조합하여 사용하는 것이 좋습니다. 예를 들어, 비즈니스 로직에서는 try-catch를 사용하여 예외를 잡아 처리하거나, 체크 에러를 런타임 에러로 변환하여 호출자에게 처리를 위임할 수 있습니다. 반면 웹 애플리케이션에서는 @ExceptionHandler를 사용하여 공통된 예외 처리 로직을 구현하고, 각 컨트롤러에서 발생할 수 있는 예외들을 처리할 수 있습니다.
결론적으로, 각 예외 처리 방식의 장단점을 이해하고 상황에 맞게 적절한 방법을 선택하는 것이 중요합니다. 코드의 가독성과 유지 보수성을 고려하여 예외 처리 전략을 세우면 좋은 결과를 얻을 수 있습니다.
이 3가지가 기본방법입니다. 그런데 여기에 추가로 의견을 드리자면 try~catch로 잡는 순간 코드가 아주 지저분해집니다. 그리고 실무에서 발생하는 거의 대부분의 예외는 이렇게 잡아도 크게 해결하지 못합니다. 예를 들어서 데이터베이스 오류, IO 오류 등등 수 많은 오류가 발생하는데 그것들을 try~catch로 잡아서 처리하는 것 보다는 기본적으로 @ExceptionHandler를 사용해서 공통 처리하는 것이 좋습니다.
제가 권장하는 방법은 최대한 @ExceptionHandler를 사용해서 여기서 예외에 대한 부분을 깔끔하게 마무리하는 것입니다. 그러면 애플리케이션 코드는 예외에 대해서 크게 고민하지 않아도 됩니다. 대부분 해결하기도 어렵고, 또 해결이 안되면 @ExceptionHandler 부분이 처리를 해줄 것이니까요.
정리하자면 1. @ExceptionHandler를 최대한 활용한다. 2. 디테일하게 처리할 필요가 있을 때만 try~catch를 부분적으로 사용한다.
이렇게 사용하시는 것을 권장드립니다^^
감사합니다.
제가 생각하고 있던 내용을 완벽하게 정리해주셔서 감사합니다. 항상 강의 보면서 지식이 축적되는 느낌이 들어서 매 시간이 즐거운 것 같습니다. 이사님의 모든 강의의 완강까지 3개정도 남았는데 끝까지 잘 소화해보겠습니다. 항상 멋진 강의와 답변 감사드립니다.