SpringBoot - @Builder 패턴

Seongjin Jo·2023년 1월 1일
0

SpringBoot

목록 보기
1/4

✔ @Builder 패턴


1.@Builder를 사용하면 어떤 필드에 어떤 값을 넣어야 하는지 명확하게 지정할 수 있다.
2.기존 생성자 방식을 사용하지 않고 객체를 생성할 수 있다.
3.Setter를 이용하는 방식보다 안전하며, Setter 생성을 방지하기 때문에 객체를 변경할 수 없다.(불변성 보장),
4.lombok에서 제공해준다.
5.파라미터 순서가 바뀌는 등 골치 아픈 일을 막아준다.

생성자 패턴 예시 (기본 방법)

post 클래스

public class Post {

    private String title;
    private String content;
    
    public Post(String title, String content) {
        this.title = title;
        this.content = content;
    }
    
    public Post(){
    }
    
    // Getter 
	public String getTitle() {
		return title;
	}
	public String getContent() {
		return content;
	}
    
    //Setter
    public String setTitle(String title){
    	this.title = title
    }
    
    public String setContent(String content){
    	this.content = content
    }
}

기본 생성자 방식 1

   Post post = new Post();
   post.setTitle("제목1");
   post.setContent("내용1");

기본 생성자 방식 2

   Post post = new Post("제목1","내용1");

객체 프로퍼티가 많아 지면 코드가 길어지고 파라미터 위치가 변경되면 골치가 아프게 된다. setter를 이용하면 객체의 불변성도 보장하지 못한다. 단점이 팍팍 드러나는 코드이다.

@Builder 패턴 예시 (lombok 이용)

post 클래스

@Getter
public class Post {

    private String title;
    private String content;
    
    @Builder
    public Post(String title, String content) {
        this.title = title;
        this.content = content;
    }

@Builder 패턴

   Post post = Post.builder()
   					.title("제목")
                    .content("내용1")
                    .build();

객체의 프로퍼티가 많아져도 코드가 가독성이 좋고, All생성자를 만들고 @Builder만 붙여주면 원하는 객체만 set할 수 있다.setter를 이용하지 않기 때문에 객체의 불변성도 보장된다. @Getter만 클래스에 달아주면 getter,setter 다 가능하다.

@Builder 패턴 테스트

    void test1(){
    
        //given
        PostCreate post = PostCreate.builder()
                .title("제목입니다.")
                .content("내용입니다.")
                .build();

        //expected
        assertThat(post.getTitle).isEqualTo("제목입니다");
        assertThat(post.getContent).isEqualTo("내용입니다.");
    }

0개의 댓글