@SuperBuilder 란?

헨도·2024년 7월 22일
0

SpringBoot

목록 보기
10/23
post-thumbnail

차장님께서 만드신 프로젝트 내 코드를 기반으로 분석하며 프로젝트를 진행 중인데, 엔티티를 만들 때 다양한 어노테이션이 선언돼있었다.
그 중 하나...@SuperBuilder 라는 녀석에 꽂히게 됐는데...

@SuperBuilder ?

  • Lombok 라이브러리에서 제공하는 어노테이션 중 하나이다.
  • 이 어노테이션을 사용하면 자바 빈(Java Bean) 클래스를 빌더 패턴(Builder Pattern)으로 간편하게 구현할 수 있다.
    - 자식 클래스의 Builder 를 사용하여 부모 클래스의 필드까지 한번에 세팅하기 위해 자식, 부모 모두 @SuperBuilder 를 사용한다.

Builder Pattern 이란?

  • 객체를 생성하기 위한 여러 속성을 가진 클래스를 생성하고, 이를 이용하여 객체를 생성하는 방식
  • 빌더 패턴은 객체 생성을 보다 유연하고 가독성 높은 방식으로 구현할 수 있어, 객체 생성 로직이 복잡한 경우 유용하다.

장점

  1. 생성자 파라미터가 많을 경우 가독성을 위해 사용한다.
  2. 순서가 상관없다.

이어서..

  • @SuperBuilder 어노테이션은 @Builder 어노테이션의 기능을 보완하기 위해 도입되었다.
  • @Builder 어노테이션으로는 상속받은 필드를 빌더에서 사용하지 못하는 등의 제한이 있었다.
  • @SuperBuilder 어노테이션은 이러한 제한을 해결했고, 상속받은 필드도 빌더에서 사용할 수 있다.

@SuperBuilder 장점

  • 빌더 패턴(Builder Pattern) 을 구현하기 위한 코드를 간결하게 작성 가능하다.
  • 별도의 빌더 클래스를 작성하지 않아도 된다.
  • 생성자에서 상속받은 필드도 빌더에서 사용할 수 있다.

사용 예시

  • SuperBuilder 를 사용하기 위해서는 부모와 자식 클래스 모두 어노테이션을 추가해줘야한다.

부모 클래스 - Parent

@SuperBuilder
public class Parent {
	private String parentField;
}

자식 클래스 - Child

@SuperBuilder
public class Child extends Parent {
	private String childField;
}

예제 코드

class SuperBuilderTest {
	@Test
    void superBuilderTest() {
    	Child child = Child.builder()
			.parentField("parent")
            .childField("child")
            .build();
    }
}

예시2

빌더 x

Member member = new Member("testMember", "test1234", "testName", "test@test.com")

빌더 o

Member member = Member.builder().username("testMember")
					.password("test1234")
                    .nickName("testName")
                    .email("test@test.com")
                    .build();
profile
Junior Backend Developer

0개의 댓글