TIL (Today I learned
2024/01/23 화요일 TIL Spring boot @Builder 애노테이션
코딩준우
2024. 1. 23. 20:00
SpringBoot @Builder 애노테이션이란 무엇인가?
@Builder시 추가되는 코드
Before:
@Builder
class Example<T> {
private T foo;
private final String bar;
}
After:
class Example<T> {
private T foo;
private final String bar;
-----------------------------------------------------------------------
// private 생성자
private Example(T foo, String bar) {
this.foo = foo;
this.bar = bar;
}
public static <T> ExampleBuilder<T> builder() {
return new ExampleBuilder<T>();
}
// static 내부 클래스
public static class ExampleBuilder<T> {
private T foo;
private String bar;
private ExampleBuilder() {}
// 해당 매서드에 이름에 해당하는 필드값을 설정하는 함수
// 자기 자신을 다시 반환하여 .을 연속적으로 입력 가능(like StringBuilder)
public ExampleBuilder foo(T foo) {
this.foo = foo;
return this;
}
// 해당 매서드에 이름에 해당하는 필드값을 설정하는 함수
// 자기 자신을 다시 반환하여 .을 연속적으로 입력 가능(like StringBuilder)
public ExampleBuilder bar(String bar) {
this.bar = bar;
return this;
}
@java.lang.Override public String toString() {
return "ExampleBuilder(foo = " + foo + ", bar = " + bar + ")";
}
// @Builder 위의 메서드를 이용하여 설정한 필드를 가지는 애너테이션을 선언한 객체 반환
public Example build() {
return new Example(foo, bar);
}
}
}
예시 코드
package com.example.example;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
class VeryBigSizeData {
private int v;
}
@Getter
@Setter
@Builder
class Test<T> {
private int a;
private Integer b;
String s;
private T data;
}
public class Example{
public static void main(String[] args) {
Test test = Test.<VeryBigSizeData>builder()
.a(1)
.b(2)
.s("hello")
.data(new VeryBigSizeData())
.build();
System.out.println(test.getA());
System.out.println(test.getB());
System.out.println(test.getS());
System.out.println(test.getData());
}
}