[Spring] Lombok의 @Builder와 @SuperBuilder
들어가며
Lombok 라이브러리 중 @Builder와 @SuperBuilder 어노테이션을 사용하면, 객체의 생성 과정을 구현하는 것에 있어서 큰 도움을 받을 수 있습니다.
이 포스팅에서는 두 어노테이션의 특징과 사용법, 그리고 언제 어떤 것을 선택하면 좋을 지에 대해 다루고 있습니다.
❏ @Builder란?
@Builder는 Lombok에서 제공하는 어노테이션으로, 빌더 패턴을 자동으로 구현해줍니다. 따라서, 편리하게 빌더 패턴을 사용해줄 수 있는데요. 😆
사용 예시
@Getter
@Builder
public class Person {
private String name;
private int age;
}
// 객체 생성
Person person = Person.builder()
.name("홍길동")
.age(30)
.build();
Person 클래스 위에 @Builder 어노테이션을 사용하고 있는 모습입니다.
객체 생성 시에 builder를 통해 각 필드에 값을 할당하며 사용합니다.
- 어떤 필드에 어떤 값이 설정되는지 명확하게 볼 수 있습니다.
- 필드의 순서에 관계없이 객체를 생성할 수 있습니다.
- 객체 생성 후 내부 상태를 변경할 수가 없기에, 불변 객체를 쉽게 생성할 수 있습니다.
이렇게 편리한 @Builder이지만, 상속 관계인 경우에는 어떨까요??
아쉽게도 부모 클래스의 필드는 자식 클래스의 빌더에 포함될 수 없습니다.😢
그렇지만 우리에겐 @SuperBuiler가 있다!
❏ @SuperBuilder란?
@SuperBuilder는 @Builder의 확장 버전으로, 상속 관계에서도 빌더 패턴을 사용할 수 있도록 합니다.
사용 예시
@Getter
@SuperBuilder
public class Person {
private String name;
private int age;
}
@Getter
@SuperBuilder
public class Student extends Person {
private int grade;
private String school;
}
// 객체 생성
Student student = Student.builder()
.name("홍길동")
.age(30)
.grade(3)
.school("학교")
.build();
Student 클래스는 Person 클래스를 상속받고 있는 상태를 예시로 들고 와보았어요.
@SuperBuilder를 통해서 부모 클래스의 name, age도 설정할 수 있다는 점이 포인트입니다 ✨
이렇게 @Builder와 @SuperBuilder의 각 개념에 대해 예시와 함께 정리해보았습니다.
다음 포스팅으로는 @Builder 사용법에 대해 정리해보고자 합니다!
다음 글)
@Builder 사용법, @Builder.Default (feat. warning: @Builder.Default requires ~)