본문 바로가기
JAVA SPRING

빌더패턴(Builder Pattern)

by 앙헬디마리아 2021. 7. 18.
728x90

빌더 패턴(Builder pattern)이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다.

 

앞서 포스팅하였던 싱글톤 패턴과 마찬가지로 생성 패턴에 속한다.

 

 

생성패턴이란?

더보기

생성패턴은 인스턴스를 만드는 절차 추상화하는 패턴

시스템으로부터 객체의 생성/합성 방법을 분리해내기 위함
생성패턴은 시스템이 어떤 구체 클래스를 사용하는지, 또한 인스턴스들이 어떻게 만들어지고 어떻게 합성되는지에 대한 정보를 완전히 가려준다.

 

'무엇이 생성되나요?' → 알 수 없음
'어떻게 생성되나요?' → 알 수 없음
'언제 생성되나요?' → 알 수 없음
'누가 이걸 생성하나요?' → 알 수 없음

 

https://tech-people.github.io/2020/01/08/java-design-pattern-creational/

 

디자인패턴 1부 - 생성패턴

작성자 : 플랫폼 개발실 R&D팀 김솔잎 디자인 패턴디자인 패턴은 주로 객체지향 프로그래밍 언어로 소프트웨어 개발할 때에, 특정 상황에서 자주 나타나는 문제를 해결하기 위해 수많은 개발자

tech-people.github.io

 

 

 

빌더 패턴의 간단한 예를 살펴보자.

 

유저의 정보를 담는 객체를 만들었다.

 

이 객체를 사용하기 위해서 new 키워드를 통해 객체를 생성해야한다.

 

 

객체를 생성하였다.

 

만약 주소가 필수 값이 아니라면

 

 

다음과 같은 방식으로 생성할 수 있다.

 

그런데 null은 별로 모양새도 좋지 않아 추가로 생성자를 만들어주는 방법을 선택할 수도 있다.

 

혹은 순서를 잘못 입력하여 객체를 생성할 때 

다음처럼 age에 이름이 들어가거나 나이가 이름에 들어갈 수 도 있다.

 

물론 IDE가 똑똑해서 표시가 되어있지만... 여간 귀찮은 일이 아닐 수 없다. 

 

이런 상황을 피하기 위해 좀 더 직관적인 객체를 만들 수 있게 돕는 것이 빌더 패턴 이다.

 

 

이번엔 빌더패턴을 사용하여 테스트를 해보자.

 

@Builder 어노테이션을 사용하여 UserBuilder 클래스 생성

 

 

 

 

아래의 빌더패턴을 사용하게 되면 순서도 신경안써도되고 값을 넣어주지 않으면 자동으로 NULL로 자동으로 셋팅해준다.

 

 

 

추가적으로 @Builder 와 @SuperBuilder 의 차이점에 대해 알아보도록 하겠다.

 

 

실무에서 @SuperBuilder 를 사용하고 있는데 대체 무슨 차이가 있었는지 궁금했다.

 

먼저 기존의 @Builder 를 사용했을때를 살펴보자

 

 

부모 클래스와 자식 클래스를 만들고 자식은 부모를 상속받게 만들었다.

 

 

 

자 이제 상속을 받았으니까 Child 객체를 생성해야지..

 

?????????????

 

 

그렇다. @Builder 를 사용하게 되면 상속받아온 파라미터는 사용 할 수 없다.

 

자 이제 Child 클래스에서 @Builder 를 @SuperBuilder로 바꾸어 주자

 

밑에 상속받아온 a, b의 파라미터도 셋팅 할 수 있다.

 

 

 

 

 

참조


https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4

 

빌더 패턴 - 위키백과, 우리 모두의 백과사전

빌더 패턴(Builder pattern)이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. /** "Product" */ class Pizza { private String dough = "

ko.wikipedia.org

https://lemontia.tistory.com/483

 

[JAVA] 빌더 패턴(Builder Pattern)에 대해 알아보자

빌더 패턴은 디자인 패턴 중 하나로써 의도는 생성과 표현의 분리입니다. 그런데 이렇게만 쓰면 감이 잘 안올 수 있으니 실제 사례를 말해보겠습니다. 내 경우 map 에 담아서 데이터를 활용한 경

lemontia.tistory.com

https://jaimemin.tistory.com/1508

 

Lombok) 상속받는 부모 클래스 필드도 빌더 패턴을 적용하고 싶을 경우

개발을 진행하다가 Lombok @Builder 어노테이션을 사용하여 부모 클래스 필드 값을 세팅했는데도 불구하고 로그를 찍어보면 부모 클래스 필드가 전부 null 인 문제점이 발생했습니다. 간단하게 예시

jaimemin.tistory.com

 

728x90

'JAVA SPRING' 카테고리의 다른 글

싱글톤 패턴(Singleton Pattern)  (0) 2021.07.17
JUnit 5  (0) 2021.06.27
서블릿(Servlet) 이란?  (0) 2021.06.04
@Transactional  (0) 2021.06.03
Spring WebFlux란?  (0) 2021.05.29