개발하다보면.. 유사한 결과를 반환하는 클래스가 필요한 경우가 있다.
예를들어 API에서 호출에 따른 결과를 반환하는 경우.
결과 Status와 결과 data들을 반환하면 된다.
그래서 다음과 같이 응답의 기본을 생성했다고 가정하자.
@Setter
public class MyResponseMessage{
private int responseCode;
private String responseMessage;
}
이렇게 하면 API의 호출에 따른 결과를 반환해줄 수 있다.
근데.. 여기서 하나만 더 생각해보자. 내가 TableA 쿼리 결과와 TableB쿼리결과를 반환하는 API가 각각 하나씩 있다고 해보자. (둘 다 List)
그럼.. 응답 Object를 어떻게 해줄 수 있을까?
@Setter
public class ResponseMessageTableA{
private int responseCode;
private String responseMessage;
private List<TableADto> resultItems;
}
@Setter
public class ResponseMessageTableB{
private int responseCode;
private String responseMessage;
private List<TableBDto> resultItems;
}
이런식으로 쭉 만들을까?
(물론 이 예제는 제가 지금 단순히 생각나는 경우로 작성한거라서 더 좋은 예제가 있을 거라고 생각합니다. 그냥 단순히 예를 든거니까 이렇게 하면 안되지! 싶으시면 댓글로 태클 걸어주세요 :) )
이럴때 <T>를 써서 generic으로 만들자. 아래처럼
@Setter
public class ResponseMessage<T>{
private int responseCode;
private String responseMessage;
private List<T> resultList;
private T resultItem;
}
위와 같이 선언해주면
ResponseMessage<TableADto> respA = new ReponseMessage...;
ResponseMessage<TableBDto> respB = new ReponseMessage...;
respA.getResultList().add( new TableADto());
respA.getResultList().add( new TableADto());
respA.getResultList().add( new TableADto());
...
respB.getResultList().add( new TableBDto());
....
위와 같이 사용을 할 수 있다.
이런식으로 T에 적절한 클래스를 전달만 해주면 범용적으로 사용이 가능하다.
적어도 클래스별로 ResponseMessage를 만들 필요가 전혀 없으니 노가다가 줄어든다. :)
Generic은 이런 용도 말고도 사용할 용도는 무궁무진하니까. 잘 사용해보아요.
반응형
댓글