작성
·
778
2
Result 클래스를 만들어서 response 데이터를 보냈습니다. 이때 제너릭으로 설정하신 이유가 있나요?
현재 아래 코드가 이런식입니다.
static class Result<T> {
private T data;
}
그런데 제너릭을 쓰지 않는 반환용 DTO를 만들어서
static class ResultDto{
private List<OrderDto> orderDtos
}
이렇게 하지 않는 이유가 있나요?
보통 실무에서는 어떤 방식을 주로 사용하시나요?
감사합니다.
답변 1
8
안녕하세요. asdf5184님, 공식 서포터즈 David입니다.
Result 객체가 생기기 전에는 MemberDto, OrderDto 등 각각 서로 다른 타입으로 반환하고 있습니다.
MemberDto는 멤버 정보를 담고 있는 객체이고, OrderDto는 주문 정보를 담고 있는 객체입니다.
예를들어, 응답 데이터로 특정 도메인의 정보(Member, Order 등)뿐만 아니라 응답 상태 코드를 추가적으로 나타내라는 요구사항이 추가되었습니다.
그러면 MemberDto, OrderDto는 응답 상태 코드를 가지기에는 객체의 정체성과 맞지 않습니다. 응답 상태 코드는 멤버 정보도 아니고, 주문 정보도 아니기 때문입니다.
따라서 API 컨트롤러의 응답을 추상화한 Result라는 클래스를 도출합니다
Result는 응답을 추상화했기 때문에 사용자가 요청한 데이터(MemberDto, OrderDto)도 담아야 하고, 응답 그 자체에 대한 데이터(StatusCode)도 담을 수 있어야 합니다.
이런 맥락에서 Result 객체의 핵심인 사용자가 요청한 데이터를 받는 data 필드가 생기게 되고, 추가 요구사항이었던 statusCode도 추가될 수 있습니다. 이때 사용자가 요청한 데이터가 어떤 타입이든 Result 객체에서 받을 수 있으려면 제네릭을 사용하여 명시한 타입을 data의 타입으로 사용할 수 있게 하는 것입니다.
실무에서 어떤 것을 선호한다기 보다, 제네릭이 필요한 상황이 있다면 제네릭을 씁니다.
굳이 필요없다면 구체적인 타입을 명시합니다.
감사합니다.