스프링을 처음 배울 떄에는 롬복의 @Setter를 먼저 알게 되었다. 그런데, 실제로는 @Builder를 사용하고 있어서 차이에 대해 알아본다.
@Setter는 클래스의 필드에 대해 자동으로 setter 메서드를 생성한다. 이를 통해 객체의 속성 값을 설정할 수 있으며, 별도로 setter 메서드를 작성할 필요가 없어진다.
import lombok.Setter;
@Setter
public class Car {
private String make;
private String model;
private int year;
}
// 기본 생성자
public Car() {
}
// make 필드의 setter 메서드
public void setMake(String make) {
this.make = make;
}
// model 필드의 setter 메서드
public void setModel(String model) {
this.model = model;
}
// year 필드의 setter 메서드
public void setYear(String year) {
this.year = year;
}
Car car = new Car();
car.setMake("Kia");
car.setModel("k8");
car.setYear(2024);
@Builder는 빌더 패턴을 자동으로 생성하여 객체를 초기화하고 생성하는 데 사용된다. 이를 통해 복잡한 객체를 쉽게 생성할 수 있으며, 객체의 속성 값을 설정하는 메서드를 자동으로 생성한다.
import lombok.Builder;
@Builder
public class Car {
private String make;
private String model;
private int year;
}
Car car = new Car.Builder()
.make("Kia")
.model("k8")
.year(2024)
.build();
| 구분 | @Setter | @Builder |
|---|---|---|
| 패턴 | 자바빈즈 패턴 | 빌더 패턴 |
| 중점 | 객체 생성 | 속성 값 설정 |
| 객체 생성 방법 | 기본 생성자로 객체를 만들고, 필요한 정보는 setter 메서드를 사용해서 넣어주는 방법 | 객체를 만들 때 필요한 정보를 조합해서 간편하게 만들 수 있는 방법 |
| 장점 | - 구현이 간단함 - 필요한 속성만 setter로 설정 가능 | - 복잡한 객체 생성 과정을 단순화 가능함 - 객체의 각 속성을 명시적으로 지정하여 가독성이 높음 |
| 단점 | - 객체의 불변성을 보장하기 어려움 - 객체의 일관성을 해칠 수 있음 | - 코드의 길이가 늘어날 수 있음 |
객체의 일관성, 불변성과 코드의 가독성을 위해 Builder 패턴을 사용하는 게 좋겠다.