끄적끄적(Memo)/레퍼런스(reference)

생성자 패턴 vs 빌더패턴

Chaany 2022. 10. 18.
728x90

동료의 소스코드를 보다가 생성자 패턴과 빌더패턴을 섞어서 사용하길래 왜 두 가지를 섞어서 코딩하였는가라는 질문에 대해 납득할만한 답변을 듣지 못해서 직접 찾아보기로 하였다.

 

본인은 협업을 위해서라면 무조건 빌더패턴을 지향하는 게 좋지 않을까라는 생각을 했지만 이런 사고방식 또한 납득이 되지 않았다.

 

https://mangkyu.tistory.com/m/163

 

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

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

mangkyu.tistory.com

 

객체를 생성하는 대부분의 경우에는 빌더 패턴을 적용하는 것이 좋다. 물론 예외적인 케이스가 있을 수 있는데, 대표적으로 크게 다음의 2가지 상황에서는 빌더를 구현할 필요가 없다.

"객체의 생성을 라이브러리로 위임하는 경우변수의 개수가 2개 이하이며, 변경 가능성이 없는 경우"

예를 들어 엔티티(Entity) 객체나 도메인(Domain) 객체로부터 DTO를 생성하는 경우라면 직접 빌더를 만들고 하는 작업이 번거로우므로 MapStruct나 Model Mapper와 같은 라이브러리를 통해 생성을 위임할 수 있다. 또한 변수가 늘어날 가능성이 거의 없으며, 변수의 개수가 2개 이하인 경우에는 정적 팩토리 메소드를 사용하는 것이 더 좋을 수도 있다. 빌더의 남용은 오히려 코드를 비대하게 만들 수 있으므로 변수의 개수와 변경 가능성 등을 중점적으로 보고 빌더 패턴을 적용할지 판단하면 된다.

다른 사람과 협업을 하거나 변경에 대한 요구 사항이 많은 경우라면 빌더 패턴을 사용해야 하는 이유를 더욱 극명하게 느낄 수 있다. 만약 아직 객체의 생성을 위해 생성자나 수정자 패턴 또는 정적 메소드 패턴을 사용하고 있다면 롬복을 사용해 빌더 패턴을 적용하도록 하자.
728x90

댓글