[SpringBoot] 2024 게시판 만들기 Q&A ④ - @Builder 빌더 패턴

SihoonCho·2024년 11월 23일
0
post-thumbnail

※ 읽기에 앞서


본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.

또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.


📌 @Builder 빌더 패턴


Lombok@Builder 어노테이션은 객체를 빌더 패턴으로 생성할 수 있게 도와줍니다.
클래스와 생성자 중 @Builder를 어디에 붙이는지에 따라 중요한 차이가 있습니다.
다음은 두 방식의 차이점입니다.


📖 1. 클래스에 @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를 사용하는 경우, 모든 필드(멤버 변수)를 포함하는 빌더가 생성됩니다.


📖 2. 생성자에 @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와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.
profile
개발을 즐길 줄 아는 백엔드 개발자

0개의 댓글