코드를 짜다보니 문득 이런 생각이 들었다. 생성자와 빌더 무슨 차이가 있을까?
빌더를 쓰다보면 코드가 길어져 생성자로 쓰는게 좋지 않나 이런 생각을 했었다.
1. 생성자 방식
public class Donation {
private String name;
private String desc;
public Donation(String name, String desc) {
this.name = name;
this.desc = desc;
}
// getters and setters
}
Donation donation = new Donation("Donation Name", "Donation Description");
직관적이고 간단하다.
매개변수가 많아지면 가독성이 떨어지고 오버로딩이 많아질 경우 코드가 복잡해진다.
매개변수 순서에 민감하여 순서가 잘못되면 오류가 발생한다.
> 실제로 생성자를 쓰면 왔다갔다 순서를 확인해줘야 한다. 실수로 잘못넣어주면 데이터베이스에 잘못된 값들이 맵핑돼서 들어간다.
2. 빌더 방식
public class Donation {
private String name;
private String desc;
private Donation(Builder builder) {
this.name = builder.name;
this.desc = builder.desc;
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String name;
private String desc;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder desc(String desc) {
this.desc = desc;
return this;
}
public Donation build() {
return new Donation(this);
}
}
// getters and setters
}
Donation donation = Donation.builder()
.name("Donation Name")
.desc("Donation Description")
.build();
클래스를 추가로 적어야하는 코드들이 필요하지만 스프링부트 @Builder 어노테이션으로 해결이 가능하다.
매개 변수 순서 상관이 없으며 필요한 필드만 설정할 수 있다.
가독성이 높고, 명확하게 어떤 필드에 무슨 값이 들어가는지 알 수 있다.
결론
매개변수가 적으면 생성자, 많아지면 빌더패턴을 쓰는게 좋겠다.
빌더 패턴 위주로 써야겠다!
'백엔드' 카테고리의 다른 글
| 사용 중인 포트 확인, 죽이기 / 인텔리제이에서 포트 변경하는 법 (3) | 2024.01.04 |
|---|