본문 바로가기
💻 개발/Back-end

11/17 - TIL : Builder 패턴

by 컴쏘 2024. 11. 17.

 

개발을 하다가 생성자를 오버로딩하는 방식으로 생성을 하게 되는 경우가 많았다. 하지만, 이런 경우 생성자를 여러 개 생성하게 되면 매번 생성자의 파라미터들을 확인해야 하는 번거로움이 있어 다른 생성은 어떤지 알아보고자 한다. 

 

 

객체를 생성하는 방법에는 여러가지가 있다. 그리고 그 중 하나가 빌더 패턴이다. 

 

빌더 패턴이 뭘까? 빌더 패턴에 대해서 알아보자. 

 

Builder 패턴 

복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다. 

  • 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식 
  • 유연하게 다양한 타입의 인스턴스를 생성할 수 있다. (선택적 매개변수가 많은 상황에서 사용) 

위처럼 유연하게 다양한 타입의 인스턴스를 생성할 수 있는 이유는 별도의 builder 클래스를 만들어 메소드를 통해 체이닝 형식으로 값을 입력 받고 최종적으로 build()를 통해 하나의 인스턴스를 생성하여 리턴하는 패턴이다. 

 

따라서, 생성자 오버로딩 방식을 하지 않아도 되고, 데이터의 순서에도 영향을 받지 않는다. (일관된 프로세스로 객체 생성 과정을 표현할 수 있다.)

 

 

다른 생성 방식도 알아보자.

 

점층적 생성자 패턴 

생성자를 오버로딩하는 방식 

  • 가장 기본적이고 많이 사용되지만, 타입이 다양할 수록 메서드 수가 늘어나 가독성과 유지보수 측면에서 떨어진다. 

 

자바 빈 패턴 

점층적 생성자 패턴의 단점을 보완하기 위해 Setter 메소드를 사용한 자바 빈 패턴 

  • 매개변수가 없는 생성자로 객체 생성 후 Setter 메소드를 이용해 클래스 필드의 초기값을 설정하는 방식 
  • 선택적 파라미터에 대해 해당되는 Setter 메서드를 호출해 유연하게 객체 생성 가능 
  • 객체 생성 시점에 모든 값들을 주입하지 않아 일관성과 불변성에 문제가 생긴다. 

왜 일관성과 불변성에 문제? 

더보기

일관성 문제 : 필수 매개변수란 객체가 초기화 될 때 반드시 설정되어야 하는 값이다. 하지만, 이러한 값들이 설정되지 않으면 객체의 일관성이 무너진다. (객체가 유효하지 않음) 

 

불변성 문제 : 객체를 생성할 때 사용했던 setter 메서드가 객체 생성 이후에도 여전히 외부에 노출되게 된다. 따라서 누군가에 의해 객체가 수정될 가능성이 있다. 

 

빌더 패턴이 있다는 것을 알고 있지만, 직접 구현을 해서 프로젝트에 적용시켜본 적은 없었다. 

 

나중에 사용할 수 있는 상황이 온다면 적극적으로 사용을 해봐야겠다. 

 

하지만, 빌더 패턴은 코드 복잡성을 증가(N개의 클래스에 대해 N개의 새로운 빌더 클래스가 필요), 성능 저하 문제 시키기 때문에 빌더 패턴은 신중하게 도입해야 한다고 한다. 

'💻 개발 > Back-end' 카테고리의 다른 글

12/2 - TIL : Fallback  (0) 2024.12.02
12/1 - TIL : 모듈이란?  (0) 2024.12.01
11/28 - TIL : 이벤트 소싱과 CQRS  (0) 2024.11.28
11/26 - TIL : 분산 트랜잭션과 CQRS  (0) 2024.11.26
Framework와 Library의 차이  (0) 2024.11.09