본문 바로가기

2023년/ETC💁‍♂️

java spring 프로젝트에서 Builder 패턴을 사용한 이유

객체 생성을 위한 

  • 생성자 패턴
  • 정적 메소드 패턴
  • 수정자 패턴
  • 빌더 패턴 

등 다양하게 사용할 수 있는데, 생성간 빌더패턴을 왜 선호할까?


프로젝트에서 Builder 패턴을 사용해서 entity 설정을 진행했다!

당시 왜 사용했는지 이유 없이 썻는데, 자세히 알아보자

 

나는, 생성자로 할때 매개변수(parameter) 변경 간 계속해서 추가해줘야하는 번거로움 때문에 필요한 데이터만 넣을 수 있도록 하기 위해 Builder 를 사용하는 것 같았다. 그리고 Setter 도 함께 써줬는데 아마 엔티티를 수정할 때 필요한 메소드로 생각했는데 크나큰 오류였다.

Builder 와 Setter 를 함께 사용하는 좋지 않은 모오오오습

자료 찾아보니 빌더 패턴의 장점을 찾아 볼 수 있었다.

 

  1. 필요한 데이터만 설정할 수 있음 
  2. 유연성을 확보할 수 있음
  3. 가독성을 높일 수 있음
  4. 변경 가능성을 최소화할 수 있음

 

생성자를 여러개 안만들어도됨 (필요한 데이터만 설정할 수 있음)

@NoArgsConstructor 
@AllArgsConstructor 
public class User { 
	private Long id;
    private String userName;
    private String nickName;
    private String password;
}

만약 User 가 이런 필드를 가지고 있다 했을때, 만약 필요없는 내용으로 엔티티를 생성하고 싶을땐 아래와 같이 반복적인 작업이 필요하다.

User 생성자 패턴 사용 시 매개변수가 다른 것마다 선언해줘야됨
롬복 어노테이션 하나만으로 충분! * Setter 는 빼야됩니다!!

롬복 어노테이션 하나로 빌더패턴을 사용할 수 있다.

매개변수 추가시 코드 수정에 대한 부담을 줄일 수 있음 (유연성 확보가능)

생성자로 만든 엔티티에 만약 address 를 추가했으면 모든 로직에 생성자 패턴 코드를 수정해야한다.

User 엔티티에 필드가 추가 되었을때 모든 로직 생성자 패턴 코드를 수정해야되는 번거로움이있다.

 

코드리딩이 생성자보다 편함

가독성이 아주 좋다.

위에랑 비교해도 확실히 가독성이 좋아보인다.

setter 사용시 불변성에 대한 가능성을 높임

setter 를 사용할 시 이렇게 entity 세부내용이 변경될 가능성이 있다.

Setter 를 사용 시 객체의 변경 가능성을 열어 두는 것

만약 setter 코드를 사용했을때 다른사람이 찾아 보기 전까지 어디서 할당 되었는지 판단하기 어려울 것이다.

즉, 유지보수성 측면에서도 변경 가능성을 최소화 하는것이 좋다.


프로젝트에서 사용한 빌더패턴

 

 

 

참고자료

https://stackoverflow.com/questions/328496/when-would-you-use-the-builder-pattern

 

When would you use the Builder Pattern?

What are some common, real world examples of using the Builder Pattern? What does it buy you? Why not just use a Factory Pattern?

stackoverflow.com

 

https://mangkyu.tistory.com/163

 

[Java] 빌더 패턴(Builder Pattern)을 사용해야 하는 이유

객체를 생성하기 위해서는 생성자 패턴, 정적 메소드 패턴, 수정자 패턴, 빌더 패턴 등을 사용할 수 있습니다. 개인적으로 객체를 생성할 때에는 반드시 빌더 패턴을 사용해야 한다고 생각하는

mangkyu.tistory.com