회원 컨트롤러를 구현하면서 회원가입, 로그인, 수정, 삭제, 중복검사 등을 처리하다 보니 각 API마다 요청과 응답을 처리하는 DTO가 달라져서, DTO가 많이 생겼다
그래서 효율적인 DTO 관리를 위한 방법을 찾다가 알게된 Inner class를 활용한 방법을 정리해보려한다.
Inner class를 사용하면 DTO를 하나의 클래스 내부에서 관련된 데이터끼리 묶어 관리할 수 있다.
이렇게 하면 코드의 결합도를 낮추고, 관련된 데이터만 묶어서 효율적으로 관리할 수 있다!
package com.twopro.deliveryapp.user.dto;
import com.twopro.deliveryapp.user.entity.User;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class UserDto {
private Long user_id;
private String email;
private String nickname;
public UserDto(User user) {
this.user_id = user.getUser_id();
this.email = user.getEmail();
this.nickname = user.getNickname();
}
// 정적 내부 클래스: UserResponseDto
@Getter
@Setter
public static class UserResponseDto {
private Long user_id;
private String email;
private String nickname;
private String province;
private String district;
private String role;
private String road_address;
private String detail_address;
public UserResponseDto(User user) {
this.user_id = user.getUser_id();
this.email = user.getEmail();
this.nickname = user.getNickname();
this.province = user.getProvince();
this.district = user.getDistrict();
this.role = user.getRole();
this.road_address = user.getRoad_address();
this.detail_address = user.getDetail_address();
}
}
}
Inner class를 정적으로 사용하면 결합도를 낮추면서 관련된 클래스를 묶어 효율적으로 DTO를 관리할 수 있다. 하지만 이 방식도 단점이 있으니, 상황에 따라 적절히 활용하고, 단점을 충분히 고려한 후 사용해야 한다.
결국 이것도 정답은 없는건가요..?