
테스트 만들기 : ctrl + shift + T
@Builder
@ToString
@Data
public class PostCreate {
@NotBlank(message ="타이틀을 입력해주세요.")
public String title;
@NotBlank(message ="콘텐츠를 입력해주세요.")
public String content;
public PostCreate(String title, String content) {
this.title = title;
this.content = content;
}
}
setter를 사용해서 set 하거나 필드에 바로 값을 꽂아버리는 방식보다
생성자로 set 하는 걸 좋아한다.
근데 만약 어떤 사이코패스같은 개발자가 생성자 위치를
public PostCreate(String content, String title) {
this.title = title;
this.content = content;
}
이렇게 변경해버리면 어떨까 ? ( 악마가 아닐까 )당연히 에러가 나겠지 (String,String 이니까)
근데 어디서 에러가 났는지 찾기가 매우 어려울 것이다
이런걸 방지하기 위해 @Builder 를 사용해주면 됨
▶ @Builder
- 자바 디자인 패턴에 Builder라는 패턴이 있음 참조 : https://mangkyu.tistory.com/163
- 보통 생성자 위에 달아줌 ( 클래스 위에 달수도 있긴한데 다른 어노테이션과 겹쳐서 작동이 안될수도있음 )
@Builder
public PostCreate(String title, String content) {
this.title = title;
this.content = content;
}
PostCreate request = PostCreate.builder()
.title("제목입니다")
.content("내용입니다")
.build();
▷ Builder 의 장점
- 가독성이 좋다 (파라미터가 뭐 몇십개가 있으면 순서에 맞춰서 값을 넣어주기가 힘듦)
- 값 생성에 대한 유연함
- 필요한 값만 받을 수 있다
ㄴ 예를들어 나는 title만 필요할때 title 만 인자로 받는 생성자를 하나더 만들어야 한다 ==> 지저분해짐
- 객체의 불변성
▷ Builder 사용전
ErrorResponse.java
@Getter
@RequiredArgsConstructor
public class ErrorResponse {
private final String code;
private final String message;
private final Map<String,String> validation = new HashMap<>();
public void addValidation(String fieldName,String errorMessage){
this.validation.put(fieldName,errorMessage);
}
}
ExceptionController.java

▷ Builder 사용후
ErrorResponse.java

ExceptionController.java
