해결된 질문
작성
·
499
2
안녕하세요 호돌맨님. 강의 잘 보고 있습니다!
저도 처음에 볼 때 이해하기 힘들어서 수강생분들의 질문과 호돌맨님의 답변을 보며
해당 패턴을 사용하는 목적과 동작 방식을 이해할 수 있었습니다.
더 나아가서, '혹시 다른 방법은 없을까?' 고민하면서 만들어 봤습니다...
업무때문에 바쁘신 줄은 알지만, 나중에라도 보게 되신다면 피드백 부탁드리고 싶습니다ㅎㅎ
@Getter
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@Lob
private String content;
@Builder
public Post(String title, String content) {
this.title = title;
this.content = content;
}
/**
* 첫번째 방법
* - 문제1
* .title(postEdit.getTitle() != null ? postEdit.getTitle() : title)
* 에서
* 'postEdit.getTitle() != null' 을 어떤 개발자가 'postEdit.getContent() != null' 로 몰래 바꾼다면?
*
* - 문제2
* 가독성이 안 좋아서, 문제1의 경우에 원인을 빠르게 찾기도 힘듬
*/
public void edit1(PostEdit postEdit) {
PostEdit fixedPostEdit = PostEdit.builder()
.title(postEdit.getTitle() != null ? postEdit.getTitle() : title)
.content(postEdit.getContent() != null ? postEdit.getContent() : content)
.build();
title = fixedPostEdit.getTitle();
content = fixedPostEdit.getContent();
}
/**
* 두번째 방법
* - PostEditor의 방식처럼 원본 데이터(Post)의 값을 먼저 넣고,
* 변경 데이터(PostEdit)의 값으로 덮어쓰는 방식
*
* .title(title) 또는
* .title(postEdit.getTitle())
* 처럼 키워드가(title, content, ...)가 바로 옆에 붙어있어서
* 첫번째 방법보다 알아보기 쉬움
* -> 에러 발생 시, 문제 원인을 찾기 쉬움
*/
public void edit2(PostEdit postEdit) {
PostEdit.PostEditBuilder editBuilder = PostEdit.builder()
.title(title)
.content(content);
PostEdit fixedPostEdit = editBuilder
.title(postEdit.getTitle())
.content(postEdit.getContent())
.build();
title = fixedPostEdit.getTitle();
content = fixedPostEdit.getContent();
}
}
답변 1
4
안녕하세요. 호돌맨입니다.
질문을 남겨주셔서 감사합니다.
좋은 코드 만들어주셔서 감사합니다.
Post가 PostEdit까지 알고 있어야 하는가에 대해서 생각해볼 필요가 있습니다.
- Post를 수정하려면 서비스정책으로 만들어 둔 PostEdit까지 테스트 해야될 수 있습니다.
- 나중에 다른 애플리케이션 모듈이 추가된다면 해당 모듈은 Post만 참조하고 싶은데도 불구하고 PostEdit을 알아야 될 수 있습니다.
예를들어 admin 모듈이 추가된 상태에서 api, admin이 있다고 했을때 각 모듈에서 게시물을 수정하기 위해 Post.edit을 사용해야 한다면 api에서 쓰고 있는 PostEdit을 admin과 공유 해야될 수 있습니다.
PostEditor로 만들어진 값을 PostEdit에 넣을 필요가 있는지 생각해보면 좋을것 같습니다.
현재는 Post와 PostEditor가 같은 영역에 위치해 있고 Post를 수정하려면 PostEditor를 통해서만 가능합니다.
https://www.youtube.com/watch?v=RVO02Z1dLF8
PostEditor관련해서 보충 영상을 찍어야되나 생각중입니다.
혹시 잘 이해가 안되면 언제나 질문 주세요. 환영합니다.
감사합니다.