Builder Pattern ( 빌더패턴 )

최수정·2022년 11월 15일
0

자바프로그래밍

목록 보기
13/15

객체를 생성하기 위해 생성자 패턴, 정적 메소드 패턴, 수정자 패턴, 빌더 패턴을 사용 할 수 있다. 이중에서 빌더패턴에 대해 알아본다.

빌더 패턴이란

  • 생성과 관련된 디자인 패턴으로, 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법
  • 빌더 패턴은 복잡한 객체를 생성하는 클래스와 표현하는 클래스를 분리하여, 동일한 절차에서도 서로 다른 표현을 생성하는 방법을 제공한다.
  • 생성해야하는 객체가 Optional한 속성을 많이 가질 때 더 좋다.

ASis - Tobe

Asis

  1. 클라이언트 프로그램에서 팩토리 클래스를 호출할 때 Optional한 인자가 많아지면, 타입과 순서에 대한 관리가 어려워져 에러 발생 확률이 높아진다.
  2. 경우에 따라 필요 없는 파라미터들에 대해서 팩토리 클래스에 일일이 NULL 값을 넘겨줘야한다.
  3. 생성해야 하는 sub class가 무거워지고 복잡해짐에 따라 팩토리 클래스 또한 복잡해진다.

Tobe

  1. 불필요한 생성자를 만들지 않고 객체를 만든다.
  2. 데이터의 순서에 상관 없이 객체를 만들어 낸다.
  3. 사용자가 봤을때 명시적이고 이해할 수 있어야 한다.

  • 위와 같이 객체를 생성할 때, 생성자만 사용할 때 발생할 수 있는 문제를 개선하기 위해 빌더 패턴이 고안됨
  • 빌더 패턴은 별도의 Builder 클래스를 만들어 필수 값에 대해서는 생성자를 통해, 선택적인 값들에 대해서는 메소드를 통해 값을 입력받은 후에 build() 메소드를 통해 최종적으로 하나의 인스턴스를 return 하는 방식이다.

빌더 패턴의 장점

  • 필요한 데이터만 설정할 수 있다.
    : 생성자 또는 정적 메소드와 비교하여 테스트용 객체를 생성할 때 용이하다.
  • 유연성을 확보한다.
    : 변수를 추가하기 위해서 기존의 객체 값을 고쳐야 하는 다른 방법들에 비해 영향을 주지 않고 수정 가능하다.
  • 가독성을 높인다.
    // 생성자 패턴
    User user = new User("sujeong", 25, "running")
    // builder 패턴
    User user = User.builder()
               .name("sujeong")
               .age(25)
               .hobby("running").build();
  • 변경 가능성을 최소화한다.
    : 수정자패턴의 경우 불필요하게 변경 가능성을 열어두는 것이기도 하다. 이는 유지보수 시에 값이 할당된 지점을 찾기 힘들게 하며 불필요한 코드 리딩을 유발한다. 만약 값을 할당하는 시점이 객체의 생성뿐이라면 객체에 잘못된 값이 들어왔을 때 그 지점을 찾기 쉬우므로 유지보수성이 높아진다.
    그래서 클래수 변수는 변경 가능성을 최소화하는 것이 좋다.

빌더 패턴 사용법

User user = User.builder()
             .name("sujeong")
             .age(25)
             .hobby("running").build();

참고

0개의 댓글