코드보고 해석을 하다가 자주 보게 되는 Builder.
객체를 만들어준다는 것 밖에 모르기 때문에 제대로 알기 위해서 정리해보자.
1. Builder 패턴 정의
Builder 패턴은 복잡한 객체를 단계별로 생성할 수 있도록 하는 디자인 패턴입니다. 이 패턴은 객체를 생성하는 과정을 여러 단계로 나누어, 각 단계에서 필요한 값만 설정할 수 있도록 합니다. 이때, 객체의 생성자에서 처리할 수 없는 복잡한 초기화 작업을 분리하여 가독성을 높이고 유지보수를 용이하게 합니다.
핵심 아이디어: 생성자 대신에 Builder 클래스를 사용해 객체를 생성하며, 빌더 객체에 필요한 값을 차례대로 설정한 후 최종적으로 객체를 생성합니다.
2. Builder 패턴을 사용하는 이유
- 가독성 향상: 객체의 생성자가 복잡하거나, 많은 필드를 가질 때, 여러 개의 생성자나 매개변수를 사용하는 것보다 Builder를 이용한 명시적인 방법이 가독성을 높입니다.
- 불변 객체 생성: Builder 패턴을 사용하면 생성한 객체를 불변(immutable)으로 만들 수 있습니다. 즉, 객체를 생성 후 값이 변경되지 않게 할 수 있습니다.
- 유연한 객체 생성: 객체의 속성이 많거나 선택적인 경우, Builder 패턴을 통해 필요한 속성만 설정하고 나머지 속성은 기본값을 사용할 수 있어 유연하게 객체를 생성할 수 있습니다.
- 오버로딩 방지: 여러 생성자를 오버로딩하는 대신, 빌더 클래스를 사용하면 하나의 생성자로 다양한 객체를 만들 수 있습니다. 예를 들어, 어떤 필드는 생략하고, 어떤 필드는 반드시 설정할 수 있습니다.
3. Builder 패턴 사용 방법
1. Builder 클래스 정의하기
먼저, Builder 클래스를 정의하여 객체를 생성할 수 있는 메서드를 제공합니다. 빌더 클래스 내부에 생성할 객체를 위한 필드와 메서드들을 설정합니다.
public class Person {
private String name;
private int age;
private String address;
// Private constructor to prevent direct instantiation
private Person(PersonBuilder builder) {
this.name = builder.name;
this.age = builder.age;
this.address = builder.address;
}
public static class PersonBuilder {
private String name;
private int age;
private String address;
public PersonBuilder setName(String name) {
this.name = name;
return this;
}
public PersonBuilder setAge(int age) {
this.age = age;
return this;
}
public PersonBuilder setAddress(String address) {
this.address = address;
return this;
}
// Build the final Person object
public Person build() {
return new Person(this);
}
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
2. Builder 사용하기
객체를 생성할 때는 PersonBuilder를 사용하여 단계별로 설정하고, 마지막에 build() 메서드를 호출하여 객체를 생성합니다.
public class Main {
public static void main(String[] args) {
// Builder 패턴을 사용하여 객체 생성
Person person = new Person.PersonBuilder()
.setName("John Doe")
.setAge(30)
.setAddress("123 Main St")
.build();
System.out.println(person);
}
}
3. Builder 활용 장점
- 명확한 코드: 각 필드를 명시적으로 설정할 수 있으므로 생성자에 비해 코드가 명확합니다.
- 선택적 필드: Builder는 필요한 필드만 설정하고 나머지는 기본값을 유지할 수 있습니다.
- 불변 객체: Person 객체는 final로 선언되며 생성 후 변경할 수 없으므로, 안전하게 불변 객체를 생성할 수 있습니다.
요약
Builder 패턴 정의
Builder 패턴은 복잡한 객체를 단계별로 생성할 수 있도록 도와주는 디자인 패턴으로, 객체 생성 시 가독성과 유연성을 높여줍니다.
왜 사용하는지
1. 가독성 향상: 복잡한 객체를 생성할 때 명시적인 방법을 제공.
2. 불변 객체: 객체 생성 후 수정할 수 없는 객체 생성 가능.
3. 유연성: 선택적 속성 설정 가능.
어떻게 사용하는지
1. Builder 클래스 정의: 객체를 생성할 메서드를 제공.
2. 객체 생성: Builder 객체를 사용해 필요한 값 설정 후 build() 메서드 호출.
출처: chat gpt
'Java > SpringBoot' 카테고리의 다른 글
Throwable cause, Throwable (1) | 2024.11.07 |
---|---|
@JsonInclude (1) | 2024.11.07 |
Enum (1) | 2024.11.07 |
@JsonFormat (0) | 2024.11.07 |
messages.properties (0) | 2024.11.07 |