Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Item 2] Builder 패턴 대신 Lombok의 @Builder를 사용할 때, 필수 필드를 지정해야하는 제약이 없는 문제를 해결하는 방법 #2

Open
Kim-TaeUk opened this issue Apr 20, 2024 · 4 comments
Assignees
Labels
question Further information is requested 🐼욱짱🐼

Comments

@Kim-TaeUk
Copy link
Member

Kim-TaeUk commented Apr 20, 2024

질문있어요 🙋‍♀️🙋‍♂️

질문은 아니고 피드백 주시면 감사하겠습니다~~!

📚 책

Lombok 관련, 책에는 나와있지 않고 강의에서만 언급된 내용입니다.

질문

Effective Java 책에서는 생성자의 매개변수가 많은 경우 Builder 패턴을 이용하여 해결하는데,
백기선 님 강의에서는 더 나아가 Lombok의 @Builder를 사용함으로써 개발자가 작성해야하는 코드가 줄어드는 이점을 가지게 되는 것에 대해 언급합니다.

하지만 Lombok의 @Builder를 사용하는 경우,
Builder 패턴을 사용할 때와 다르게 필수로 지정해주어야 하는 필드에 대한 제약이 없다는 문제가 발생하고,
이를 해결하기 어렵다고 합니다. (아이템 2. 핵심 정리 2 - 빌더 - 09:37)

NutritionFacts

@Builder
public class NutritionFacts {

    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;

    public static NutritionFactsBuilder builder(int servingSize, int servings) {
        return new NutritionFactsBuilder().servings(servings).servingSize(servingSize);
    }
}

LombokBuilderTest

public class LombokBuilderTest {
    public static void main(String[] args) {

        // AS-IS 필수 필드에 대한 제약 O
        NutritionFacts cocaCola = NutritionFacts.builder(240, 8)
                // optional한 필드들 지정
                .calories(100)
                .build();

        // TO-BE 필수 필드에 대한 제약 X
        NutritionFacts sprite = new NutritionFactsBuilder()
                // optional한 필드들 지정
                .calories(100)
                .build();

    }
}

위 코드처럼 NutritionFacts 클래스에 정적 메서드 builder를 통해
빌더 객체를 생성하기 전에 필수 필드를 넣어야 하는 제약을 추가해주는 방식으로 해결할 수 있었습니다.
(builder 메서드는 NutritionFactsBuilder을 리턴하여 메서드 체이닝하는 방식으로..!)

@Kim-TaeUk Kim-TaeUk added question Further information is requested 🐼욱짱🐼 labels Apr 20, 2024
@Kim-TaeUk Kim-TaeUk self-assigned this Apr 20, 2024
@bo-ram-bo-ram
Copy link
Member

오.. 강의는 못듣고 있는데 좋은 공유 감사합니다~~~~

@tkdwns414
Copy link
Contributor

안 그래도 궁금했는데 해당 내용 이미 적어주셨네요. 감사합니당

@unanchoi
Copy link
Contributor

오홍 잘 보고갑니다

@gardening-y
Copy link
Member

오 대박 잘보고 갑니다~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested 🐼욱짱🐼
Projects
None yet
Development

No branches or pull requests

5 participants