목차
💡
- 왜 빌더 패턴을 사용해야 하는가?
- 설계도는 어떻게 생겼나?
- 실제로 어떻게 구현하나?
- 장점과 단점은 무엇인가?
왜 빌더 패턴을 사용해야 하는가?
생성자에 들어갈 매개변수가 많고, 그 중 필수가 아닌 선택적인 값이 섞여 있을 때, 실수를 방지하기 위해 사용합니다.
생성자의 경우 매개변수를 입력하는 순서가 정해져 있지만, 마무리를 하기 전까지 값을 명확하게 추가할 수 있습니다.
설계도는 어떻게 생겼나?
만들고자 하는 객체 안에 static 형태의 Builder클래스를 만들고, 값을 세팅한 뒤 this를 반환합니다.
실제로 어떻게 구현하나?
빌더 클래스 세팅
public class Hero {
private String name;
private int hp;
private String weapon; // 선택 사항
// 생성자는 private으로 막아서 외부에서 직접 생성 못하게 함
private Hero(Builder builder) {
this.name = builder.name;
this.hp = builder.hp;
this.weapon = builder.weapon;
}
// 내부에 static builder 클래스를 생성
public static class Builder {
// 필수 값
private String name;
private int hp;
// 선택 값
private String weapon;
// 필수 값은 생성자로 받기
public Builder(String name, int hp) {
this.name = name;
this.hp = hp;
}
/*
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setHp(int hp) {
this.hp = hp;
return this;
}
*/
public Builder setWeapon(String weapon) {
this.weapon = weapon;
return this;
}
// 최종적으로 static 내부에서 만들어진 Hero를 반환
public Hero build() {
return new Hero(this);
}
}
}
실행 예시
public class Main {
public static void main(String[] args) {
// 점(.)을 찍어서 계속 연결하는 것이 핵심!
Hero myHero = new Hero.Builder("전사", 100)
.setWeapon("전설의 검")
.build();
System.out.println("생성 완료!");
}
}
장점과 단점은 무엇인가?
장점
- 가독성 향상
- new Hero(”A”, 1 , null, “Sword”) 처럼 모든 파라미터를 생성자에 만드는 형태가 아니라, new Hero.Builder(”홍길동”,88).setWeapon(”Sword”) 같은 형태로 사용해서 필요한 파라미터만 추가하면 됩니다.
- 안정성 향상
- 필수 값은 객체 생성 시점에 반드시 전달되고, 선택 값은 명확하게 구분되어 객체 생성 과정에서의 실수를 줄일 수 있습니다.
단점
- 구조 복잡성 증가
- 빌더 패턴을 만들기 위해서, 클래스가 2개 이상 활용해야 하기 때문에, 간단한 클래스라면 오히려 복잡해지게 됩니다.
- 코드 수정의 번거로움
- N개의 필드를 가진 클래스를 만들려면, 빌더 클래스에도 N개의 필드를 만들어야합니다.
'LV3_Advanced > GOF 패턴' 카테고리의 다른 글
| Adapter (어댑터) - 구조 패턴 #2 (0) | 2026.02.24 |
|---|---|
| Strategy (스트래티지) - 행위 패턴 #2 (0) | 2026.02.20 |
| Template Method (템플릿 메서드) - 행위 패턴 #1 (0) | 2026.02.19 |
| 퍼사드 (Facade) - 구조 패턴 #1 (0) | 2026.02.19 |
| Singleton (싱글톤) - 생성 패턴 #1 (0) | 2026.02.11 |