[Spring]

[Java] Builder 패턴

danhan 2023. 1. 16. 00:01

Java에서 객체를 생성할 때 사용하는 패턴은 대표적으로 생성자 패턴과 빌더 패턴이 있다. 빌더 패턴을 사용하면 지금 채워야 할 필드가 무엇인지 명확하게 지정할 수 있다.

예시부터 보면..

public class Person {
private String name;
private String grade;
public Person(String name, String grade){
this.name = name;
this.grade = grade;
}
// Getter
public String getName() {
return name;
}
public String getGrade() {
return grade;
}
}
String name = "jueun";
String grade = "4";
Person p1 = new Person(name, grade);
// String type 변수가 위치가 바뀌어도 문제점 찾지 못한다.
Person p2 = new Person(grade, name);

위와 같이 생산자를 이용한 생성자 패턴을 사용한 경우 변수의 타입이 같다면 두 데이터의 위치를 바꾼 뒤 변수를 생성해도 개발자는 문제점을 쉽게 찾지 못할 것이다.

이를 빌더 패턴으로 바꾸면 다음과 같다.

@Getter
public class Person {
private String name;
private String grade;
private int age;
@Builder // 생성자에 @Build 어노테이션 적용
public Person(String name, String grade, int age) {
this.name = name;
this.grade = grade;
this.age = age;
}
}

Lombok의 @builder를 사용해 동일한 Person 객체를 만들었다.

String name = "jueun";
String grade = "4";
Person p1 = Person.builder()
.name(name)
.grade(grade)
.build();
}

이렇게 빌더로 접근하면 어떤 필드에 어떤 값을 채워야 할지 명확히 지정할 수 있다.

그래서 빌더 패턴이란?

복잡한 객체의 생성 과정 및 표현 방법을 분리해 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴을 말한다.

빌더 패턴의 장점은?

  • 어떤 필드에 어떤 값을 채워야 할지 명확히 지정할 수 있다. - 안전성
  • 필수 및 선택인자가 많아질수록 생성자 방식보다 가독성이 좋다. - 가독성
  • setter 생성을 방지하기 때문에 불변객체로 만들 수 있다. - 불변성 보장

참고