Home 생성패턴 - 빌더 패턴
Post
Cancel

생성패턴 - 빌더 패턴

Builder Pattern

디자인 패턴이란?

디자인 패턴이란?

  • 디자인 패턴은 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제를 자주 쓰이는 설계 방법을 정리한 패턴이다.
  • 디자인 패턴을 참고하여 개발하면 효율성과 유지보수성, 운용성이 높아지며, 프로그램 최적화가 된다고 한다.  

디자인 패턴을 목적과 범위로 나눌수 있다

구분유형설명
 생성객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행
목적구조더 큰 구조 형성 목적으로 클래스나 객체의 조합을 다루는 패턴
 행위클래스나 객체들이 상호작용하는 방법과 역할 분담을 다루는 패턴
범위클래스클래스간 관련성(상속), 컴파일 시 정적으로 결정
 객체객체 간 관련성을 다루는 패턴, 런타임 시 동적으로 결정

  

복잡한 객체를 생성할떈 setter, new 대신 빌더를 이용해서 생성과 표기를 분리하자!

빌더 패턴이란?

복잡한 인스턴스를 조립하여 만드는 구조로써 복합한 객체를 생성할때, 객체를 생성하는 과정과 객체를 구현하는 방법을 분리함으로써, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있는 디자인 패턴이다.

필자는 StringBuilder를 통해 간접적으로? 쓰고 있었던 패턴이다. 개발을 하다보면 유저에 포함된 정보가 엄청 많이 들어가진다. 그러다보면 필드값만 10가지가 넘는경우가 허다하다.
그렇다고 유저를 생성할떄마다 필드값 전부를 다 쓰지않는다. email을 저장해도 되고 안해도 된다는 상황이 있다고 가정해보자.
이럴 경우 생성자나 정적메소드를 이용하는 경우에는 필요할 떄마다 생성자를 만들거나 email에 의미없는 값을 넣어줘야한다.
순서로부터 상관없는 Setter를 써도 되지만 불필요하게 확장 가능성을 열어두기에 SOLID원칙인 Open-Closed 법칙에 위배된다.
그러므로 클래스 변수는 final로 객체 생성은 빌더를 사용하는게 좋다.

1
2
3
4
5
6
7
8
9
10
 //생성자 호출보단
Member member = new Member("name", age, height, email);

//Setter 보단
member.setName("name"); member.setAge(age);  

Member member = member.builder()
                      .name("name")
                      .age(age)
                      ...//생략 이런식의 빌더를 쓰자!

결론

  • 필요한 데이터만 설정가능하다
  • 가독성 향상
  • 유연성
  • 불변성

하지만 주로 웹 개발시, 엔티티 객체 또는 도메인객체로 DTO를 생성해서 다루기에 직접 빌더를 만들고 하는 작업이 번거로우니 MapStruct나 Model mapper에게 생성을 위임하자

참고자료

Head First 디자인패턴
면접을 위한 CS 전공지식노트

This post is licensed under CC BY 4.0 by the author.