Builder Pattern
- 생성자에 매개변수가 많을 때 사용하는 방법
- 필수 매개변수 만으로 생성자를 호출해서 빌더 객체를 얻는다. 그 다음 빌더 객체가 제공하는 세터 메소드들로 원하는 선택 매개변수들을 설정한다.
- 빌더 패턴에 대한 자세한 내용은 이펙티브 자바 item2를 보고 링크에 정리했다.
public class NutritionFactsBuilder {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
// 필수 매개변수
private final int servingSize;
private final int servings;
// 선택 매개변수 - 기본값으로 초기화
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public Builder(int servingSize, int servings) {
// 필수 매개변수 초기화는 생성자에서
this.servingSize = servingSize;
this.servings = servings;
}
// 산텍 매개변수에 대한 Setter
public Builder calories(int val) {
calories = val;
return this;
}
public Builder fat(int val) {
fat = val;
return this;
}
public Builder sodium(int val) {
sodium = val;
return this;
}
public Builder carbohydrate(int val) {
carbohydrate = val;
return this;
}
// NutritionFactsBuilder 생성자 호출
public NutritionFactsBuilder build() {
return new NutritionFactsBuilder(this);
}
}
// Builder 를 매개변수로 넣는 생성자
public NutritionFactsBuilder(Builder builder) {
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
public static void main(String[] args) {
NutritionFactsBuilder nutritionFactsBuilder = new NutritionFactsBuilder.Builder(240, 9).calories(100).sodium(10).build();
Builder builder = new Builder(240, 9);
builder.calories(100);
builder.sodium(10);
NutritionFactsBuilder nutritionFactsBuilder1 = builder.build();
}
}
lombok.Builder
- 빌더 패턴 적용을 위한 빌더를 자동으로 생성해준다.
기본 사용법
- 아래와 같이 @Builder만 붙여주면 모든 멤버 변수를 포함하는 생성자가 자동으로 생성된다. (이때는 @AllArgsConstructor와 쓰임이 비슷함)
@Builder
public class BuilderTest {
private Long id;
private String name;
private String nickname;
}
public class Main {
public static void main(String[] args) throws IllegalAccessException {
// 기본 빌더
BuilderTest builderTest = new BuilderTest(3L, "ee", "e");
}
}
필수 생성자만 파라미터로 받기
- 위에 코드처럼 길게 구현해야 했을 builder를 롬복이 자동으로 생성해준다.
@Builder
public class BuilderTest {
private Long id;
private String name;
private String nickname;
public static BuilderTestBuilder builderWithId(Long id) throws IllegalAccessException {
if (id == null) {
throw new IllegalAccessException("필수 파라미터 누락");
}
return builder().id(id);
}
}
public class Main {
public static void main(String[] args) throws IllegalAccessException {
// 필수 값만 넣은 빌더
BuilderTest builderTest1 = BuilderTest.builderWithId(12L)
.name("이름 추가")
.build();
}
}
반응형
'java' 카테고리의 다른 글
Java 환경변수 설정이 필요한 이유, 설정 방법 (mac) (0) | 2023.02.02 |
---|---|
소나큐브(Sonarqube)와 jacoco로 코드품질 측정, 정적분석 (0) | 2022.09.13 |
[java] File 지우기. delete vs deleteOnExit() (0) | 2022.06.22 |
[Java] Nested Class (중첩 클래스) (0) | 2022.01.05 |