빌더 패턴(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
'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 |