@builder vs 생성자

J_Eddy·2022년 5월 27일
0
post-thumbnail

💡 JPA를 이용하면서 Entity와 Dto클래스를 사용하였다. 이 때 builder 패턴을 이용해서 개발을 하였는데 그 이유를 명확히 하고자 기록한다.

Builder 패턴을 사용해야 하는 이유

Builder 패턴의 장점

  • 필요한 데이터만 설정 가능
  • 명확한 데이터 설정이 가능
  • 높은 가독성

필요한 데이터만 설정 가능

예를 들어 user라는 객체가 있고 name, age, gender이라는 파라미터를 받아야 하는데, 굳이 age라는 파라미터를 받지 않아도 되는 상황이 있다. 이 때 생성자를 이용해서 구현 하면 dummy값을 넣어줘야한다. 하지만 빌더 패턴을 이용하면 해당 값을 제외하고 객체를 생성할 수 있다.

...
@Data
@Builder
public class User {
	private String name;
	private int age;
	private String gender;
}
...

User user = User.builder()
            .name(name)
            .gender(gender)
            .build();

명확한 데이터 설정이 가능

만일 위 데이터에서 builder 패턴을 이용하지 않고 생성자를 이용해서 객체를 생성했다고 생각해보면 아래와 같이 코드를 작성 할 수 있다.

//생성자
public setUser(String name, String gender){
	this.name = name;
	this.gender = gender;
}

....
 //빌더 패턴
User user = User.builder()
            .name(name)
            .gender(gender)
            .build();

이렇게 되면 개발자가 setUser(gender, name)으로 해도 에러가 나지않을 것이고 코드를 실행 후에 잘못을 알게된다. 따라서 이러한 방법보다 좀더 직관적인 빌더 패턴을 쓰는것이 코드를 작성할 떄 명확해 진다.

높은 가독성

만일 파라미터의 갯수가 10개가 있다고 생각해보면 생성자를 이용해서 객체를 생성할 때 가독성이 떨어질 수 있다. 하지만 빌더패턴을 이용하면 위에서 언급한 것과 마찬가지로 명확해 지며 가독성을 높일 수 있다.

//생성자
setUser(a,b,c,d,e,f,g,h,i,j,k,...)

...
//빌더 패턴
User user = User.builder()
						.id(a)
            .name(b)
            .email(c)
            .nickname(d)
            .mobileNumber(e)
            .gender(f)
            .address(g)
							...
            .role(k)
            .build();

이처럼 생성자와 빌더 패턴 모두 생성시점에 값을 채워주는 역할은 같지만 개발하면서 느끼기에 builder패턴을 쓰는것이 더욱 명확하며 제 3자가 내 코드를 봤을 때 가독성이 높아 builder패턴을 선호하며 쓰고있다.

profile
논리적으로 사고하고 해결하는 것을 좋아하는 개발자입니다.

0개의 댓글