빌더 패턴은(Builder Pattern) 복잡한 객체의 생성과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성패턴
빌더 패턴의 장점
🎨 가독성이 좋다
🎨 값 생성에 대한 유연함
🎨 필요한 값만 받을 수 있다
🎨 객체의 불변성
점층적으로 생성자를 만들 때, 필요에 따라서 그 클래스를 호출하기 위해서 0개, 1개, 2개 등등 점층적으로 생성자를 오버로딩 해야했다.
이런 경우에 클래스 인스턴스 필드들이 많아지게 되면 어떤 자리에 어떤 인자가 들어가는지 헷갈리는 경우들이 발생하게 된다. 그리고 어떤 인스턴스 필드에는 값을 넣지 않고 싶을 때 그것을 생략할 방법이 없기 때문에 강제적으로 0이나 null 을 넣어야했다. 마지막으로 클래스 인스턴스가 길어지게되면 가독성이나 유지보수 측면에서 좋지 않은 모습을 보인다.
생성자를 통한 객체 생성의 문제점을 보완하기 위해 setter를 사용해서 값을 세팅해주는 방법이 생겼지만 이것은 객체 생성 시점에 값을 주입받는 것이 아니라 생성 이후에 값을 주입받는 것이라서 일관성과 불변성의 문제가 발생하게 되었다.
🎁 빌더 패턴의 등장
빌더 패턴은 이러한 문제들을 해결하기 위해 별도의 Builder 클래스를 만들어 메서드를 통하여 값을 입력받은 뒤 build() 를 통해서 하나의 인스턴스를 생성하여 리턴하는 패턴이다.
Post post = Post.builder()
.title(postCreate.getTitle())
.content(postCreate.getContent())
.build();
위와 같이 빌더패턴을 사용하면 생성자 오버로딩을 점진적으로 진행하지 않아도 되며, 데이터 상관 없이 메서드를 통해서 값을 넣어줄 수 있다. 그리고 체이닝 패턴을 통한 작성으로 가독성도 좋다. 또한 실제로 넣어주려고 하는 값만 넣어줄 수 있는 선택적 멤버 분리가 가능하다.
공감하며 읽었습니다. 좋은 글 감사드립니다.