728x90
우선 빌더패턴(builder pattern)을 이해해야 한다.
빌더 패턴이란?
객체를 생성하고 필드 값을 설정하기 위해 사용되는 디자인 패턴이다. 보통 인자를 많이 가지는 생성자에서 사용하면 가독성이 좋고 유연한 객체 생성이 가능하다.
생성자를 사용하여 객체를 생성할 때는 순서를 정확히 지켜줘야 한다. 하지만 만약 인자가 많다면 기억하기도 불편하고 수정하기도 힘듦;; 그리고 어느 자리(정보)에 들어가는지도 헷갈린다.
또한, 필수, 선택적 인자를 위한 각각의 생성자도 많이 필요로 한다.
public class Account {
private String name;
private String nickName;
private int age;
private String address;
}
//어디에 어떤 타입과 값인지 기억해야 함
Account account = new Account("hee", "doodong", 20, "한국");
빈즈 패턴 즉, getter, setter 사용하는 방법을 쓰면 되지만 얘는 좀 위험하단다. 코드량이 늘어나며 객체의 일관성이 깨지기 때문이란다.
(사실 @getter 등 어노테이션 쓰면 코드량은 상관없을 것 같은데 객체의 일관성이 깨진다는 것이 중요한 것 같다.)
!이럴 때 빌더 패턴 사용하면 해결된다!
필요한 값만 설정하여 객체를 생성할 수 있고 체인 방식의 메서드 호출하므로 가독성이 좋다.
@Builder
import lombok.Builder;
@Builder
public class Account {
private String name;
private String nickName;
private int age;
private String address;
}
Account account = Account.builder()
.name("hee")
.age(25)
.address("대한민국")
.build();
사용 방법은 builder 호출 후 체인 방식으로 필드값을 설정하고 build()를 호출하면 객체가 생성된다.
데이터 일관성을 위해 정보들을 받은 후 객체를 생성하는 형태다.
정리하자면 빌더 패턴은 다음과 같은 장점이 있다.
- 가독성: 메서드 체인 형태로 필드 값을 설정하므로 각 필드 역할이 명확하며 코드를 이해하기 쉽다.
- 유연성: 필요한 필드만 선택적으로 설정 가능하고 나머지는 기본값으로 설정할 수 있다.
- 가변성: 불변 객체를 생성하면서도 필드값은 변경 가능(런타임에)하다.
- 안전성: 객체가 일관된 상태로 생성되도록 보장한다. 필수 필드를 강제하고 빌더 클래스 내부에서 유효성 검사(null 체크와 같은)를 수행할 수 있다.
- 확장성: 새로운 필드나 설정 옵션을 추가하기 쉽다.
만약 클래스 내부 필드 수가 적거나 변경 가능성이 없으면 굳이 안써도 된다.
728x90