티스토리 뷰
Builder 패턴이란?
- 생성 패턴(Creational Pattern) 중 하나
- 생성 패턴 → 인스턴스를 만드는 절차를 추상화하는 것
- 무엇이 생성되고, 어떻게 생성되며, 언제 생성할 것인지 결정하는 데 유연성을 확보하기 위함
- 생성과 표현 코드를 분리
- 복합 객체를 생성하는 절차를 세밀하게 나눌 수 있음
- 별도의 Builder 클래스를 만들어 필수 값에 대해서는 생성자를 통해, 선택적인 값들에 대해서는 메소드를 통해 step-by-step으로 값을 입력받은 후, build() 메소드를 통해 최종적으로 하나의 인스턴스를 리턴하는 방식
- 클라이언트 코드에서 필요한 객체를 직접 생성하는 대신, 그 전에 필수 인자들을 전달하여 빌더 객체를 만든 뒤, 빌더 객체에 정의된 설정 메서드들을 호출하여 인스턴스를 생성
장점
- 생성해야 하는 객체가 Optional한 속성을 많이 가질 때 유리 → 필요한 데이터만 설정할 수 있음
- 인스턴스를 생성하는데 있어서 필수적인 인자와 선택적인 인자를 구별할 수 있음
- 선택적인 인자의 경우, 가독성이 좋은 코드로 인자를 넘길 수 있음
- 변경 가능성을 최소화할 수 있음
- 무분별한 setter 생성 방지 → 불필요하게 변경 가능성을 열어두는 부분을 방지
Builder 패턴 적용 여부 판단
- 변수의 개수와 변경 가능성 등을 중점적으로 보고 빌더 패턴을 적용할지 판단하면 됨
- 예시) 변수의 개수가 2개 이하이며, 변경 가능성이 없는 경우
Lombok 활용 시
- @Builder(builderMethodName = "name")
- Builder 패턴을 자동으로 생성
- builderMethodName에 들어간 이름으로 빌더 메서드를 생성해줌
- @AllArgsConstructor(access = AccessLevel.PRIVATE)
- @Builder 애노테이션을 선언하면 전체 인자를 갖는 생성자를 자동으로 만듦
- @AllArgsConstructor는 전체 인자를 갖는 생성자를 만드는데, 접근자를 private으로 설정할 경우, 외부에서 접근할 수 없도록 옵션을 걸 수 있음
참고 https://mangkyu.tistory.com/163
[Java] 빌더 패턴(Builder Pattern)을 사용해야 하는 이유
객체를 생성하기 위해서는 생성자 패턴, 정적 메소드 패턴, 수정자 패턴, 빌더 패턴 등을 사용할 수 있습니다. 개인적으로 객체를 생성할 때에는 반드시 빌더 패턴을 사용해야 한다고 생각하는
mangkyu.tistory.com
'study' 카테고리의 다른 글
map() 과 flatMap() (0) | 2022.05.17 |
---|---|
ConcurrentHashMap (0) | 2022.05.03 |
JVM과 GC (0) | 2022.04.28 |
Stateless vs Stateful (0) | 2022.04.22 |
Memcached vs Redis (0) | 2022.04.22 |