1. 클라이언트의 요청에 대한 유효성 검사는 어떻게 하나요 ?
저는 보통 DTO와 도메인 객체, 두 곳에 나눠서 유효성 검사를 진행합니다. DTO에서는 값이 존재하지 않거나 null인 경우처럼 도메인 지식과는 무관하게 유효성을 검사하고, 도메인 객체에서는 도메인 지식에 해당하는 유효성을 검사해 줍니다. 예를 들면 가격은 음수가 될 수없다던가 하는 것처럼요.
유효성 검사를 위한 로직을 직접 작성하기도 하지만, JSR-303 스펙에 따라 애너테이션을 통해 유효성 검사를 수행합니다.
2. Checked Exception과 Unchecked Exception의 차이에 대해 설명해 보세요.
Checked Exception은 Exception 클래스를 상속받는 예외고, Unchecked Exception은 RuntimeException 클래스를 상속받는 예외입니다.
Checked Exception은 try-catch문을 강제하는 예외로 throw되면 반드시 해당 예외를 try-catch로 감싸야 합니다.
하지만 runtimeException은 try-catch문을 강제하지 않습니다.
3 . Checked Exception과 Unchecked Exception 중 어떤 것을 선호하나요 ?
예외를 정의하게 되면, Unchecked Exception을 선호합니다. 몇가지 이유가 있는데요
우선 try-catch문에서 개발자가 실제로 예외를 적절히 처리할 수있는 상황이 드물다는 점을 이유로 들 수 있습니다.
그럴때 개발자는 바깥으로 예외를 다시 던지게 되고, 그럼 처리되지도 못할 예외가 무의미하게 바깥으로 던져지는 코드가 나올 겁니다. 또 다른 이유로는 Unchecked Exception으로도 충분히 예외를 처리해 줄 수 있다는 점을 들 수 있습니다.
특히 람다 표현식을 사용했을 때 try-catch 문과 함께 사용하면 코드가 불필요하게 복잡해진다는 점에서 Unchecked Exception을 선호하는 편입니다.