[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 생성을 방지하기 때문에 불변객체로 만들 수 있다. - 불변성 보장

참고