Search
Duplicate

[Java]<Generic> 타입을 사용한 ResponseService 구현 (1)

순서
1
날짜
2022/10/03
사람
상태
Done
2022년 12월 11일
오늘은 제너릭 타입을 사용한 responseService를 구현했던 방식을 기록하려고한다. 하면서 직접적으로 제너릭으로 구현해본 경험이 별로 없었기때문에 생소한 부분도 있고, 작성했던 부분에서 헷갈렸던 부분도 있기때문에 작성하였다.

ResponseService

import kakaopay.kakaopay.entitiy.exception.CommonResult; import kakaopay.kakaopay.entitiy.exception.ListResult; import kakaopay.kakaopay.entitiy.exception.SingleResult; import kakaopay.kakaopay.service.exception.CommonResponse; import org.springframework.stereotype.Service; import java.util.List; @Service public class ResponseService { // 단일건 결과 처리 메소드 public <T> SingleResult<T> getSingleResult(T data) { SingleResult<T> result = new SingleResult<>(); result.setData(data); setSuccessResult(result); return result; } // 복수건 결과 처리 메서드 public <T> ListResult<T> getListResult(List<T> list) { ListResult<T> result = new ListResult<>(); result.setList(list); setSuccessResult(result); return result; } // 성공 결과만 처리 public CommonResult getSuccessResult() { CommonResult result = new CommonResult(); setSuccessResult(result); return result; } // 실패 결과만 처리 public CommonResult getFailResult(int code, String msg) { CommonResult result = new CommonResult(); result.setSuccess(false); setFailResult(result, code, msg); return result; } // API 요청 성공 시 응답 모델을 성공 데이터로 세팅 private void setSuccessResult(CommonResult result) { result.setSuccess(true); result.setCode(CommonResponse.SUCCESS.getCode()); result.setMsg(CommonResponse.SUCCESS.getMsg()); } // API 요청 실패 시 응답 모델을 실패 데이터로 세팅 private void setFailResult(CommonResult result, int code, String msg) { result.setSuccess(false); result.setCode(code); result.setMsg(msg); } }
Java
복사
<T> SingleResult<T> getSingleResult(T data) : 앞에 제너릭은 리턴 값 함수 뒤에 값은 사용할 데이터 타입, 매개변셔 T는 전달할 데이터 타입을 명시
setSuccessResult 은 전달 받은 매개변수 값안에 데이터를 공통으로 셋팅해주는 역할을 한다.
setFailResult은 전달 받은 매개변수 값안에 데이터를 공통으로 셋팅해주는 역할을 한다.

CommonResult

import io.swagger.annotations.ApiModelProperty; import lombok.*; @Getter @Setter public class CommonResult { @ApiModelProperty(value = "응답 성공 여부: T/F") private boolean success; @ApiModelProperty(value = "응답 코드: >= 0 정상, < 0 비정상") private int code; @ApiModelProperty(value = "응답 메시지") private String msg; }
Java
복사
CommonResult는 응답성공여부, 응답코드, 응답메세지를 선언

SingleResult

import lombok.Getter; import lombok.Setter; @Getter @Setter public class SingleResult<T> extends CommonResult { private T data; }
Java
복사
CommResult를 상속받아서 응답 코드, 응답 메세지, 응답 성공여부를 체크한다.
singleResult는 데이터 한개를 주고 받았을때 응답값을 전달.

ListResult

import lombok.Getter; import lombok.Setter; import java.util.List; @Getter @Setter public class ListResult<T> extends CommonResult { private List<T> list; }
Java
복사
CommResult를 상속받아서 응답 코드, 응답 메세지, 응답 성공여부를 체크한다.
ListResult는 데이터 여러개를 주고 받았을때 응답값을 전달.

Controller

@ApiOperation(value = "계좌 생성", notes = "계좌를 생성합니다.") @PostMapping("/api/join/account") public SingleResult<AccountDto> saveAccount(@RequestBody @Valid CreateAccountRequest request ) { Account saveAccount = accountService.createMemberAccount(request.getMemberId()); AccountDto accountDto = new AccountDto(saveAccount.getAccountNo(), saveAccount.getMember().getMemberId(), saveAccount.getMember().getUserName()); responseService.getSingleResult(accountDto); return responseService.getSingleResult(accountDto); }
Java
복사
컨트롤러에서 응답값으로 responseService.getSingleReulst를 사용해서 데이터를 전달.
오늘은 ResponsService를 설계해서 응답값을 좀 더 수월하게 전송하는 방법에대해 이야기하였다. 제너릭 타입을 잘 사용해서, 좀 더 유연하고, 안전한 설계를 할 필요가 있다.