빌더 패턴이란?
빌더 패턴은 객체 지향 프로그래밍의 다양한 객체 생성 문제에 대한 유여한 솔루션을 제공하는 생성디자인 패턴 입니다. 구조를 직접 인스턴스화 하지 않고도 복잡한 객체를 단계별로 구성할 수 있습니다. 이 패턴은 가능한 많은 구성을 사용하여 객체를 생성해야 할 때 특히 유용합니다.
빌더 패턴의 핵심은 복잡한 객체의 구성과 표현을 분리하는 것입니다. 그렇게 함으로써 동일한 구성 프로세스가 다른 표현을 생성할 수 있습니다. 이는 최종 객체를 단계별로 생성하는 역할을 담당하는 'Builder' 클래스를 이용하여 불변 객체를 만드는데 자주 사용됩니다.
주요 구성요소
빌더 패턴은 다음과 같은 주요 구성 요소로 구성되어있습니다.
- 제품 : 생성해야 하는 복합 개체 입니다.
- 빌더 : 제품 객체의 일부를 생성하기 위한 추상 인터페이스 입니다.
- Concretebuilder : Builder 인터페이스를 구현하고 제품 검색을 위한 인터페이스를 제공합니다.
- 디렉터 : Builder 인터페이스를 사용하여 제품을 구성합니다.
- 클라이언트 : 제품을 구성하기 위해 Director 및 Builder를 생성하는 클라이언트 코드입니다.
빌더 패턴 사용의 이점
- 가독성 향상 : 빌더 패턴은 특히 다양한 속성을 가진 객체를 생성할 때 코드의 가독성과 유지 관리성을 크게 향상시킬 수 있습니다.
- 불변 객체 : 많은 사용구 코드 없이 불변 객체 생성을 지원합니다.
- 유연성 : 객체의 다양한 부분을 단계별로 구성할 수 있어 객체 구성에 유연성을 제공합니다.
- 객체 구성에 대한 제어 :: 복잡한 객체의 구성 프로세스를 보다 효율적으로 제어할 수 있습니다.
구현
제품 클래스
public class Car {
private final String make;
private final String model;
private final int year;
public Car(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
// Getters
}
빌더 인터페이스
public interface CarBuilder {
CarBuilder setMake(String make);
CarBuilder setModel(String model);
CarBuilder setYear(int year);
Car build();
}
'CarBuilder' 인터페이스는 빌더에 대한 계약을 정의합니다. 'Car' 객체의 각 속성을 설정하는 메소드와 'Car' 객체를 생성하는 'build()' 메소드를 선언합니다. 각 setter 메서드가 'CarBuilder' 인스턴스를 반환합니다.
ConcreteBuilder 클래스
public class ConcreteCarBuilder implements CarBuilder {
private String make;
private String model;
int year;
@Override
public CarBuilder setMake(String make) {
this.make = make;
return this;
}
@Override
public CarBuilder setModel(String model) {
this.model = model;
return this;
}
@Override
public CarBuilder setYear(int year) {
this.year = year;
return this;
}
@Override
public Car build() {
return new Car(make, model, year);
}
}
//클라이언트 코드
public class BuilderDemo {
public static void main(String[] args) {
Car car = new ConcreteCarBuilder()
.setMake("Honda")
.setModel("Civic")
.setYear(2020)
.build();
}
}
'ConcreteCarBuilder' 클래스는 'CarBuilder' 인터페이스를 구현하고 빌더 메서드에 대한 실제 구현을 제공합니다. 각 setter 메서드는 해당 속성에 값을 할당하고 빌더 자체('this') 를 반환하여 메서드 체이닝을 용이하게 합니다. 'build()' 메소드는 누적된 속성 값을 사용하여 새로운 'Car'인스턴스를 구성합니다.
클라이언트 코드에서는 'ConcreteCarBuilder'를 사용하여 'Car' 객체를 생성합니다. 빌더를 사용하면 원하는 속성을 하나씩 ('setMake','setModel', setYear') 설정한 다음 마지막 'build()' 를 호출하여 'Car'객체를 구성할 수 있습니다.
public class Car {
private String make;
private String model;
private int year;
// 생성자, 게터 및 세터 생략
}
Car myCar = new Car();
myCar.setMake("Honda");
myCar.setModel("Civic");
// myCar.setYear(2020); 누락된 경우
빌더를 사용하지 않는 경우 이렇게 특정 컬럼을 누락시킬경우 오류가 생길수있습니다.
'IT 지식' 카테고리의 다른 글
파이썬 네이버 지도 크롤링! (0) | 2024.07.10 |
---|---|
POJO(Plain Old Java Object) (0) | 2024.04.18 |
Java의 ObjectMapper 이해 (0) | 2024.03.26 |
이클립스 실행이 안될때 해결법 (1) | 2024.03.14 |
SOAP(Simple Object Access Protocol) (0) | 2024.02.20 |