반응형
정의
- 복잡한 인스턴스를 조립하여 만드는 구조로, 복합 객체를 생성할 때 객체를 생성하는 방법(과정)과 객체를 구현(표현)하는 방법을 분리함으로써 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있는 디자인 패턴
- 쉽게 얘기하면, 매번 생성자의 파라미터를 3개 4개 여러개 넣어서 만드는 것은, 객체 클래스와 생성하는 부분 모두 코드가 낭비가 있기에,
이를 줄일 수 있는 방법이라고 생각하면 된다.
구현
첫번째 방법
- 객체에 @Builder 붙이기
- 호출하는 곳에서 다음과 같이 생성
// 빌더 패턴 적용, 회원 정보 저장
User user = User.builder()
.username(userRegisterDto.getUsername())
// 패스워드 암호화
.password(passwordEncoder.encode(password))
.nickName(userRegisterDto.getNickName())
.build();
// DB에 저장
userRepository.save(user);
두번째 방법
- 직접구현
package com.sparta.juteukki02.juteukki_week02.util;
import lombok.*;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.Collection;
@Setter
@Getter // get 함수를 일괄적으로 만들어줍니다.
@NoArgsConstructor // 기본 생성자를 만들어줍니다.
@AllArgsConstructor
public class Helper {
private String returnJSON;
// 원하는 JSON 형태로 만들기 위해 빌더 클래스 생성
public static class JSONBuilder{
JSONObject obj = new JSONObject();
// 스트링 등 일반적인 형태를 JSON 형태에 담아주기
public JSONBuilder addKeyValue(String key, Object value){
this.obj.put(key, value);
return this;
}
// 리스트 형태를 담아주기
public JSONBuilder addKeyValueList(String key, Collection value){
this.obj.put(key, new JSONArray(value));
return this;
}
public Helper build(){
return new Helper(obj);
}
}
private Helper(JSONObject obj){
returnJSON = obj.toString();
}
// 예상 JSON 형태
// {
// "title1":"contents1",
// "title2":"contents2",
// }
}
보통 타겟으로 하는 객체 클래스에 빌더 클래스를 따로 만들고,
빌더 객체에 값을 더해주는 함수들과,
이 빌더 객체(obj)를 파라미터로 타겟 객체(Helper)를 생성해주는 build함수,
빌더 객체(obj)를 파라미터로 하는 타겟 객체(Helper) 생성자가 구성요소이다.
Helper.JSONBuilder builder = new Helper.JSONBuilder();
builder.addKeyValue("result", "success");
builder.addKeyValue("msg", "회원가입에 성공하였습니다.");
return builder.build().getReturnJSON();
다음과 같이 사용해 볼 수도 있다.
반응형
'백엔드 > 개발과 설계 원칙' 카테고리의 다른 글
MSA (1) | 2022.09.01 |
---|---|
객체지향 설계 5원칙 (0) | 2022.06.12 |
객체지향이란 (0) | 2022.06.12 |
Impl 분류하는 이유 (0) | 2022.04.10 |
Spring 예외처리 (0) | 2022.03.03 |