1. 빌더 패턴(Builder pattern)이란

객체를 정의하고 생성자를 통해 생성합니다.

Member member = new Member("name", "password", "comment");

이러한 방식은 몇가지 단점이 있기 때문에 객체를 생성하는 별도 builder를 두는 방법이 있다. 이를 Builer Pattern이라고 한다.

Member member = Member.builder()
			.name("name")
			.password("fffewere")
			.comment("hihellor")
			.build();

객체를 생성할 수 있는 빌더를 builder()함수를 통해 얻고 거기에 Setting을 하고 마지막에 build()를 통해 builder를 작동 시켜 객체를 생성한다.

 

2. Builder를 써야하는 이유

 

객체를 생성하는 방법중 builder를 알게 되었습니다.이러한 방법은 왜 쓰일까?

 

  • 생성자 파라미터가 많을 수록 가독성이 좋지 않다.
Member member = new Member("name", "joo1jio", "comment", "abc", "what", "is", "it", "?");

 이처럼 파라미터를 많아지는 상황이 벌어진다면? 이 값들이 어떤걸 의미하는지 이해하기 어렵다.

 이를 Builder Pattern으로 구현하면 각 값을 빌더의 각 값들의 이름이 어떻게 setting 되었는지 바로 알기 쉽다. 

 이러한 경우가 많기 때문에 생성자보다 가독성이 좋은 Builder Pattern을 사용한다.

Member member = Member.builder()
			.name("name")
			.password("fffewere")
			.comment("hihellor")
			.address("seoul")
			.mailbox("40%")
			.build();
  • 어떤 값을 먼저 설정하던 상관없다.

생성자의 경우는 정해진 파라미터 순서대로 각 값을 넣어줘야 하지만 Builder pattern은 빌더의 필드 이름으로 값을 설정하기 때문에

순서에 종속적이지 않다. 내가 편한 순서대로 정하면 된다.

 

public Member(String name, String password, String memo) {
		this.name = name;
		this.password = password;
		this.memo = memo;
}
Member member = Member.builder()
			.password("fffewere")
			.name("name")
			.comment("hihellor")
			.build();

 

2. @Builder

그렇다면 어떻게 구현할까

우선 코드로 Builder를 만들고 그 안에서 멤버 필드별로 값을 설정하고 빌더를 반환하는 함수를 만들면된다.

사실 이렇게 하면은 Getter Setter 처럼 쭉쭉 늘어지는 코드가 많이 생기는것과 비슷하다.

그래서 LOMBOK이 이를 지원한다. Builder Pattern을 적용할 객체에 @Builder를 쓰기만 하면 된다.

 

@Builder
public class Member {
		private String name;
		private String password;
		private String comment;
}

이렇게 되면 위에서처럼 Builder pattern을 써서 객체를 생성할 수 있다.

 

3. @Builder Options

 

 

  • builderMethodName()

builder()를 Rename할 수 있는 기능-> 객체 사용에 조금더 편의를 위해

  • buildMethodName()

build()를 Rename할 수 있는 기능

  • builderClassName()

 클래스 명을  Rename 할 수 있는 기능

Member member = Member.builder()
			.password("fffewere")  //return Memberbuilder
			.name("name")          //return Memberbuilder  
			.comment("hihellor")   //return Memberbuilder
			.build();
  • toBuilder()

default 값이 false  

true로 설정하면 Builder로 만든 인스턴스에서 toBuilder() 메서드를 호출해 그 값을 베이스로 새로운 빌더 패턴을 만들고 새로운 인스턴스가 생성된다.

 

 

 

Member member = Member.builder()
			.name("name")
			.password("fffewere")
			.comment("hihellor")
			.address("seoul")
			.mailbox("40%")
			.build();
            
            
Member member2 = member.toBuilder()
		.password("2131234")
                .address("jeju")
                .build();

 

 

  • access()

builder 클래스의 접근 제어자의 accesslevel의 설정을 할수 있는 기능 

default: public

AccessLevel access() default lombok.AccessLevel.PUBLIC;

 

 

 

@

https://projectlombok.org/features/Builder

+ Recent posts