본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.
또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.
Lombok
의 @Builder
어노테이션은 객체를 빌더 패턴으로 생성할 수 있게 도와줍니다.
클래스와 생성자 중 @Builder
를 어디에 붙이는지에 따라 중요한 차이가 있습니다.
다음은 두 방식의 차이점입니다.
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class User {
private String name;
private int age;
private String email;
}
// 사용 예시
User user = User.builder()
.name("John Doe")
.age(30)
.email("john.doe@example.com")
.build();
// 출력: User(name=John Doe, age=30, email=john.doe@example.com)
System.out.println(user);
- 기본적으로
@AllArgsConstructor
를 활용하여 빌더가 객체 생성- 클래스의 모든 필드(멤버 변수)를 대상으로 빌더 생성
- 클래스의 필드(멤버 변수)가 많을 때 유용
클래스에 @Builder를 사용하는 경우, 모든 필드(멤버 변수)를 포함하는 빌더가 생성됩니다.
import lombok.Builder;
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
private String email;
@Builder
public User(String name, String email) {
this.name = name;
this.email = email;
}
}
// 사용 예시
User user = User.builder()
.name("John Doe")
.email("john.doe@example.com")
.build();
// 출력: User(name=John Doe, age=0, email=john.doe@example.com)
System.out.println(user);
- 기본적으로
@AllArgsConstructor
를 활용하여 빌더가 객체를 생성하므로,
이를 이용해 제한된 필드로 객체 생성- 생성자에 포함된 필드(매개변수)만을 대상으로 빌더 생성
- 클래스의 일부 필드(멤버 변수)만 초기화하려는 경우 적합
생성자에 @Builder를 사용하는 경우, 해당 생성자의 매개변수만을 포함하는 빌더가 생성됩니다.
위 예제에서 age
는 생성자의 매개변수에 포함되지 않았으므로 빌더로 초기화되지 않습니다.
age
는 기본값인 0으로 설정됩니다.
@Builder
를 클래스에 사용하는 경우
- 비교적 코드 간결
- 클래스의 모든 필드 포함
- 모든 필드의 초기화가 필요한 경우 적합
@Builder
를 생성자에 사용하는 경우
- 생성자 추가 작성이 필요하므로 비교적 코드가 간결하지 않음
- 생성자의 매개변수에 해당하는 필드만 포함
- 특정 필드만 초기화가 필요하거나, 여러 생성자를 구분하는 경우 적합
추천 사용 방식
@Builder
사용: 모든 필드의 초기화가 필요한 경우@Builder
사용: 특정 필드만 초기화가 필요하거나, 여러 생성자를 구분하는 경우이 두 방식을 적절히 조합하면 더욱 유연한 객체 생성 패턴을 설계할 수 있습니다.
본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.
또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.