개발을 진행하다보면 객체를 생성할 때 생성자를 통해 생성하게 됩니다.
생성자를 통해 객체를 생성하게 되면 아래와 같은 여러 불편함들이 있습니다.
이러한 불편한 점들을 해결 할 수 있는 Builder 패턴에 대해서 알아보도록 하겠습니다.
Builder 패턴은 여러 생성자 인수가 필요한 복잡한 개체를 만드는 문제를 해결하는 데 사용되는 생성 디자인 패턴입니다. Builder 패턴은 객체의 구성과 표현을 분리합니다. 이를 통해 동일한 구성 프로세스에서 다른 표현을 만들 수 있습니다.
Builder 패턴에는 아래와 같은 장점들이 있습니다.
이러한 Builder 패턴은 Spring Boot에서 주로 Lombok 라이브러리를 활용하여 적용됩니다.
이번 포스팅에서도 Lombok을 사용하여 Builder 패턴을 사용하는 방법을 알아보겠습니다.
Builder 패턴을 구현하는 방법에는 순수 코드로 구현과 라이브러리를 사용한 구현이 있습니다.
먼저 순수 코드로 구현하는 방법을 알아보겠습니다.
public class User {
private String username;
private String password;
private String email;
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
// Getter 메소드는 생략
public static class Builder {
private String username;
private String password;
private String email;
public Builder() {
}
public Builder(User user) {
this.username = user.username;
this.password = user.password;
this.email = user.email;
}
public Builder username(String username) {
this.username = username;
return this;
}
public Builder password(String password) {
this.password = password;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public User build() {
return new User(username, password, email);
}
}
}
위와 같이 클래스 내부에서 따로 Builder 클래스를 선언하여 사용할 수 있습니다.
public class Main {
public static void main(String[] args) {
User user = User.builder()
.username("홍길동")
.password("password1234")
.email("hong@example.com")
.build();
}
}
객체를 생성할 때 클래스명.builder()를 입력한 후 원하는 변수들을 주입하여 합니다.
마지막으로 .build()로 객체를 생성합니다.
Lombok 라이브러리에 있는 @Builder 어노테이션을 사용하면 매우 간편하게 Builder 패턴을 적용시킬 수 있습니다.
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class User {
private String username;
private String password;
private String email;
}
@Builder 어노테이션 하나만 적용시켜주면 Builder 패턴을 사용할 수 있는 클래스가 됩니다.
public class Main {
public static void main(String[] args) {
User user = User.builder()
.username("홍길동")
.password("password1234")
.email("hong@example.com")
.build();
}
}
객체를 생성할 때 클래스명.builder()를 입력한 후 원하는 변수들을 주입하여 합니다.
마지막으로 .build()로 객체를 생성합니다.