문제 재기
만약에 어떤 메서드에서 에러를 터트린다면 orElseThrow
라는 이름으로 함수 이름을 끝내는게 적합한지에 대한 코드 리뷰를 받았다.
여태 명시적으로 메서드를 작성하는게 좋고, 클린코드를 읽고 난 이후 현대 IDE에서 자동완성기능이 정말 좋아졌기 때문에 굳이 메서드를 축약형으로 쓴다거나 줄이기 위해서 애를 쓸 필요 없다고도 생각을 했다.
제이슨님의 의견
유쾌한 스프링방에서 제이슨님이 두 가지 정도의 의견을 제시해주셨다.
- 모든 메서드는 Exception을 발생시킬 가능성을 내포하고 있다.
- 만약에 저 메서드에서 Member 값이 null 값이 들어가게 되면 NullPointException이 발생하는 등 모든 메서드들은 항상 Exception이 발생할 가능성이 내재되어 있다는 것이다.
- updateNickName(Member member, String nickName) throws Exception {}와 같이 개발하는게 조금 더 깔끔해보일 수 있다.
습프링님 의견
orThrow를 하신다는건 예외 처리를 지금 메서드가 아니라 결국 호출하는 녀석한테 맡기신다는건데 checked exception이라는 방법도 한 번 고려해보시는게 좋을 것 같아요. 저는 이 쪽을 더 선호하거든요.
Checked Exception vs Unchecked Exception
- Checked Exception
- 체크 예외는 Exception의 하위 클래스이면서 반드시 에러 처리를 해줘야하는 특징을 가지고 있다.
- 자바 개발을 진행하다보면 IDE에서
Unhandled exception: java.lang.Exception
이라면서 메서드 명에 빨간줄이 그이고 Build가 되지 않는 경우가 있는데, 이런 경우를 의미한다.
- 자바 개발을 진행하다보면 IDE에서
- 체크 예외는 Exception의 하위 클래스이면서 반드시 에러 처리를 해줘야하는 특징을 가지고 있다.
- Uncked Exception
- RuntimeException의 하위 클래스들을 의미하며 체크 얘외와는 달리 에러 처리를 강제하지 않는다.
결론
updateNickName은 에러처리가 강제되어서 에러 발생여하에 따라서 비즈니스 로직이 달라지는 부분이 아니다. 그래서 orThrow가 불필요한 네이밍이라고 판단해서 삭제했다.
여담
updateNickname 메서드를 updateNickname(...) throws Exception
과 같이 수정하면 아래와 같은 에러가 발생하게 된다.
'Spring > Error & Review' 카테고리의 다른 글
[겜문철] Dependency Inversion (0) | 2024.04.13 |
---|---|
QueryDSL Join Error 해결 (0) | 2024.03.30 |
[겜문철] 개발 Log (0) | 2024.03.23 |
통합 테스트의 필요성 (0) | 2024.03.20 |
회원가입 로직 역할과 책임에 맞게 리팩터링 (0) | 2024.03.19 |