뭐 기본적으로 Entity가 아닌 DTO를 Response로 내려보내야 하는 것은 다들 알 것이다
우리 회사의 Entity Spec을 외부에 노출하지 않으며, Setter가 열린 채로 Entity를 내려보내고, 아직 메모리에 올라와 있는 채로 어딘가에서 누군가가 수정을 하고, 업데이트나 머지가 일어난다면(영속성인 객체상태에서) 끔찍한 일이 아닐 수 없다
static으로 내부클래스로 구현할지 말지는 본인 선택이다. 깔끔해진다는 장점이 있으나 OuterClass.InnerClass이렇게 인자나 반환값이 바뀌게 되어 오히려 이게 안예쁘게 보일 수 있다
프로젝트 브라우저 내에서 이쁘게 보일것이냐 => static(inner)
코드 레벨에서(함수 인자나 반환값으로 쓸 때) 참조를 깊게 안할것이냐 => non staic
그리고 드디어 이 글의 메인 내용이다
뭐 이 글의 요지는 그게 아니고, 누군가가 원래 만든 DTO Response를 수정 없이 보여주고 싶지 않은 필드를 제외하고, 원래 있던 DTO에서 특정 api만 데이터를 추가하는 방법이다
뭐 객체지향을 하는 사람이라면 다 알듯한데...
원래의 리스폰스가
@Getter
@Setter
public class MflixUserRes implements Serializable {
private ObjectId id;
private String name;
private String email;
private String password;
}
이런 형태이다
만약에 굳이 id를 보여주고 싶지 않고, 나이와 메모 필드가 추가된 리스폰스를 받고 싶은 api가 있다면 어떻게 해야할까?
원래 있던 이 반환 클래스를 변경할까? 그럼 이 DTO를 사용중인 어느곳에서 또 수정이 일어날텐데?
그럴 경우 Json어노테이션과 객체지향을 적절히 쓰면 된다
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
@Getter
@JsonIgnoreProperties(value = {"id"})
public class CustomMflixUserRes extends MflixUserRes {
private int age;
private String memo;
}
원래 있던 객체를 훼손시키지 않고, 그냥 이 리스폰스에 id는 제외하면서, age와 memo필드는 추가가 되었다
나 혼자 일하는거면 상관없지만, 내가 어떤 것을 고침으로 인해서 내가 남의 코드를 고치고 있거나 남의 코드가 나의 변경점으로부터 영향을 받으면 그것은 일을 두번하는거라 생각한다
스마트하게 처리할수있게 노력하자~!
+
만들고나니 이전 글이랑 매우 유사하지만... 한참 전이기도 하고 그땐 여러가지를 말한거였으니 ! ㅎㅎ 이해바람당 하트
'Backend > Java - Spring' 카테고리의 다른 글
Slack 채널에 메세지 보내기 2023년 (Spring, Js) (0) | 2023.01.08 |
---|---|
jar Build Task(Feat. thin/plain, fat/uber) + no main manifest attribute in ... (0) | 2022.09.04 |
DTO 돌려막기 멈춰!(feat. jackson annotation) (0) | 2022.05.30 |
댓글