자바 생성자 패턴Java2024. 9. 25. 13:13
Table of Contents
반응형
생성자 패턴(Builder Pattern)은 자바에서 객체를 단계별로 생성하고, 그 과정에서 복잡한 객체 생성에 유연성을 제공하는 디자인 패턴입니다. 생성자 패턴은 특히 많은 매개변수를 가진 복잡한 객체를 만들 때 유용합니다. 이 패턴은 객체의 생성과정에서 다양한 설정 옵션을 제공하면서도, 그 객체의 일관성을 보장하는 데 중점을 둡니다.
생성자 패턴의 특징
- 단계별 객체 생성: 객체를 생성할 때 여러 단계로 나누어 객체를 구성하고 최종적으로 완성된 객체를 생성할 수 있습니다.
- 읽기 쉬운 코드: 메서드 체이닝을 통해 가독성을 높이고, 필수적인 속성과 선택적인 속성을 명확히 구분할 수 있습니다.
- 불변성: 빌더 패턴을 사용하면 객체를 불변 객체로 만들기 쉬워지며, 설정 완료 후 객체가 변경되지 않게 할 수 있습니다.
예시: 생성자 패턴을 적용한 객체 생성
아래는 Builder
패턴을 사용하여 Person
객체를 생성하는 예시입니다. 이 예시에서는 다양한 선택적 속성을 제공하면서도 객체가 일관성을 유지하도록 설정할 수 있습니다.
class Person {
// 필수 속성
private final String firstName;
private final String lastName;
// 선택 속성
private final int age;
private final String address;
private final String phone;
// private 생성자 (빌더를 통해서만 객체를 생성하도록 함)
private Person(Builder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.address = builder.address;
this.phone = builder.phone;
}
// Builder 클래스
public static class Builder {
// 필수 속성
private final String firstName;
private final String lastName;
// 선택 속성 (초기값 설정)
private int age = 0;
private String address = "";
private String phone = "";
// 필수 속성들을 받아들일 생성자
public Builder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
// 선택 속성을 설정하는 메서드들
public Builder age(int age) {
this.age = age;
return this;
}
public Builder address(String address) {
this.address = address;
return this;
}
public Builder phone(String phone) {
this.phone = phone;
return this;
}
// 최종적으로 Person 객체를 반환하는 build 메서드
public Person build() {
return new Person(this);
}
}
@Override
public String toString() {
return "Person{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", age=" + age +
", address='" + address + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
사용 방법:
빌더 패턴을 사용하여 Person
객체를 생성하는 예시는 아래와 같습니다.
public class Main {
public static void main(String[] args) {
// 필수 속성만 설정한 Person 객체
Person person1 = new Person.Builder("John", "Doe").build();
// 필수 속성과 선택 속성을 모두 설정한 Person 객체
Person person2 = new Person.Builder("Jane", "Doe")
.age(28)
.address("123 Main St")
.phone("123-456-7890")
.build();
System.out.println(person1); // 출력: Person{firstName='John', lastName='Doe', age=0, address='', phone=''}
System.out.println(person2); // 출력: Person{firstName='Jane', lastName='Doe', age=28, address='123 Main St', phone='123-456-7890'}
}
}
장점:
- 가독성 향상: 메서드 체이닝을 통해 객체 생성 코드를 간결하고 읽기 쉽게 만듭니다.
- 유연성 제공: 필수 속성과 선택 속성을 분리하여, 객체 생성 시 필요한 속성만 설정할 수 있습니다.
- 불변 객체 생성 가능: 빌더 패턴은 객체가 불변 상태로 유지되도록 돕고,
final
필드와 함께 사용하여 안전한 객체 생성을 지원합니다. - 코드 유지보수성 향상: 생성자에 매개변수가 많아지더라도 어떤 매개변수가 어떤 속성에 대응하는지 쉽게 알 수 있습니다.
생성자 패턴이 유용한 경우:
- 생성자나 팩토리 메서드에 전달할 매개변수의 개수가 많을 때
- 객체의 필수 속성은 많지 않지만, 다양한 선택적 속성을 제공하고 싶을 때
- 복잡한 객체를 생성하는 로직을 단계별로 나누고 싶을 때
생성자 패턴은 특히 가독성을 중시하면서도 유연한 객체 생성 방식을 제공하는 데에 유리한 패턴입니다.
반응형
@위피M :: ChatGPT로 여는 새로운 세상!!
ChatGPT, 블록체인, 자바, 맥북, 인터넷, 컴퓨터 정보를 공유합니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!