인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

ykm8864님의 프로필 이미지
ykm8864

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Business Layer 테스트 (1)

builer 생성 방식 메서드 분리

작성

·

124

0

  • 학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!

  • 먼저 유사한 질문이 있었는지 검색해 보세요.

  • 서로 예의를 지키며 존중하는 문화를 만들어가요.

     

 강의를 보면 createProduct 를 통해서 builder 패턴 생성자 생성 방식을 공통메서드로 분리해주셨는데요.

이는 builder 패턴이 제공해주는 생성자 생성방식의 유연성을 함수로 분리함으로써 인해 제약을 주는 것이기도 한 거 같다는 생각이 들었습니다. 만약에 각 Product마다 필요한 컬럼이 다르다면 createProduct 함수로 분리하는게 아닌 반복이 되지만 어쩔 수 없이 각각 builder() + 체이닝 방식으로 코드를 기술하셨을지, 아니면 필요한 함수 시그니처마다 함수를 분리하셨을지 궁금합니다.

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, ykm8864 님!

테스트 코드에서 createProduct()와 같이 메서드를 별도로 구성한 이유는, 테스트 코드 자체의 가독성 때문입니다.
지금이야 예제가 간단하지만, 실제로 복잡한 프로젝트에서는 given절에 정말 많은 내용이 들어갈 수 있는데요, 그때마다 모든 객체를 빌더 패턴으로 그대로 생성하면 코드량이 상당히 많아집니다.
오히려 상황에 맞는 메서드를 만들어 사용하면, 메서드명으로 어떤 특징을 가지고 있는 객체인지를 나타내줄 수도 있기에, 필요한 파라미터에 맞게 메서드를 만드는 편입니다.

도움이 되셨기를 바랍니다.
감사합니다 🙂

0

안녕하세요, 인프런 AI 인턴입니다.
Spring이나 다른 객체 지향 프로그래밍에서 Builder 패턴을 사용할 때, createProduct와 같은 공통 메서드를 사용하는 방식과 개별 상품마다 필요한 필드를 고려한 방법에 대해서는 몇 가지 접근법이 있습니다.

  1. 공통 메서드 사용:
    지속적인 코드 중복이 있는 경우, 특정한 createProduct 메서드를 만들어 공통 생성자를 관리하는 것은 코드의 가독성을 높이고 유지보수를 쉽게 하는 장점이 있습니다. 하지만 이 방법은 모든 제품의 특성이 동일하거나 비슷할 때 가장 효율적입니다. 만약 일부 제품만 특정 필드를 필요로 한다면 기본값으로 설정하거나 선택적으로 메서드를 오버로드할 수 있습니다.

  2. 개별적인 Builder 사용:
    만약 각 Product 마다 필요한 컬럼이 크게 다르고, 공통적인 부분이 거의 없다면, 각 Product 객체마다 개별 builder() 메서드를 사용하고 그에 따라 체이닝하는 것이 자연스러울 수 있습니다. 이 방법은 형식과 구조면에서 더 유연성이 있어 확장성 있는 설계를 할 수 있지만, 코드가 다소 길어질 수 있습니다.

  3. 필요한 함수 시그니처마다 분리:
    특정한 경우에는 각 제품에 대해 필요한 함수 시그니처나 설정을 별도의 메서드로 분리할 수도 있습니다. 이 같은 접근은 필요에 따라 유연하게 메서드를 생성해 확장할 수 있으며, 각 제품이 필요로 하는 모든 구체적인 요구를 충족할 수 있습니다.

각 방법에는 장단점이 있으며, 선택은 주어진 상황과 요구 사항에 크게 좌우됩니다. 코드의 재사용성, 확장성, 그리고 유지보수성을 고려하여 가장 적합한 방법을 선택하시면 됩니다.

추가적으로, 프로젝트나 코드 구조에 따라 결정하시는데 도움이 되도록, Spring Data JPA의 Query Method Creation과 같은 문서를 참고하셔도 좋습니다. 이는 비슷한 방식으로 복잡한 쿼리를 구성하고 관리하는 데에 도움을 줄 수 있습니다.

ykm8864님의 프로필 이미지
ykm8864

작성한 질문수

질문하기