본문 바로가기
320x100
320x100

뭐 기본적으로 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필드는 추가가 되었다

 

나 혼자 일하는거면 상관없지만, 내가 어떤 것을 고침으로 인해서 내가 남의 코드를 고치고 있거나 남의 코드가 나의 변경점으로부터 영향을 받으면 그것은 일을 두번하는거라 생각한다

스마트하게 처리할수있게 노력하자~!

 

+

만들고나니 이전 글이랑 매우 유사하지만... 한참 전이기도 하고 그땐 여러가지를 말한거였으니 ! ㅎㅎ 이해바람당 하트

320x100

댓글