Back-end/Spring

[Spring] @SuperBuilder 의 특징과 간단한 예제

shoney9254 2024. 2. 9. 16:53
반응형

@SuperBuilder 의 특징과 간단한 예제

@SuperBuilder는 Project Lombok 라이브러리의 어노테이션 중 하나로, 상속 구조를 가진 클래스에서 빌더 패턴을 쉽게 사용할 수 있게 해줍니다. 일반적인 @Builder 어노테이션과 달리 @SuperBuilder는 부모 클래스와 자식 클래스 간의 상속 관계를 고려하여 빌더를 생성합니다. 이를 통해 각 클래스의 필드를 초기화하는 데 필요한 빌더 메소드를 자동으로 생성해줍니다.

1. @SuperBuilder의 장점

  1. 상속 구조 지원: 상속 구조에서도 빌더 패턴을 쉽게 구현할 수 있게 해줍니다. 부모 클래스의 필드와 자식 클래스의 필드를 모두 한 번에 설정할 수 있는 빌더 클래스를 생성합니다.
  2. 타입 안전성: 빌더 패턴을 사용함으로써 객체를 생성할 때 타입 안전성을 보장받을 수 있습니다. 필요한 필드에 대한 값을 메소드 체이닝 방식으로 설정하기 때문에, 컴파일 타임에 타입 체크가 가능합니다.
  3. 가독성 향상: 객체 생성 시 생성자에 여러 매개변수를 전달하는 대신, 메소드 체이닝을 통해 필요한 필드만을 명시적으로 설정할 수 있습니다. 이는 코드의 가독성을 크게 향상시킵니다.
  4. 불변 객체 생성 용이: 빌더 패턴은 불변 객체(Immutable Objects)를 생성하기에 적합한 패턴입니다. 객체 생성 후 상태를 변경할 필요가 없는 경우, 빌더를 통해 불변 객체를 손쉽게 생성할 수 있습니다.

 

2. @SuperBuilder 예제

 

부모 클래스 Vehicle과 이를 상속받는 자식 클래스 Car가 있다고 가정해보겠습니다. @SuperBuilder를 사용하여 빌더 패턴을 적용하는 예제 코드는 다음과 같습니다.

2-1. 부모 클래스 (Vehicle.java)

import lombok.experimental.SuperBuilder;

@SuperBuilder
public class Vehicle {
    private String brand;
    private String model;
}

2-2. 자식 클래스 (Car.java)

import lombok.experimental.SuperBuilder;

@SuperBuilder
public class Car extends Vehicle {
    private int seats;
    private boolean sportsCar;
}

2-3. 객체 생성 예제

public class Main {
    public static void main(String[] args) {
        Car car = Car.builder()
                      .brand("Toyota")
                      .model("Supra")
                      .seats(2)
                      .sportsCar(true)
                      .build();

        System.out.println(car);
    }
}

이 예제에서는 @SuperBuilder를 사용하여 Vehicle 클래스와 Car 클래스에 대한 빌더를 생성했습니다. Car 객체를 생성할 때 Car.builder() 메소드를 사용하여 부모 클래스인 Vehicle의 필드(brand, model)와 Car의 필드(seats, sportsCar)를 모두 설정할 수 있습니다. 이렇게 @SuperBuilder를 사용하면, 상속 구조에서도 각 클래스의 필드를 쉽게 설정하며 객체를 생성할 수 있습니다.

반응형