[ 자바 ] 정적 팩토리 메서드 사용하기 pt. 2 - Builder, 빌더 패턴을 활용하기
지난번 팩터리 메서드의 후속편입니다.사용자 친화적인 Builder 패턴에 대하여 알아보겠습니다.
(클릭 후 이동하기) 이번 포스트는 깃허브에서 마크다운 버전으로도 확인 가능 합니다.
TABLE OF CONTENTS
- 설명
- 적용하기
- 장/단점
- Lombok
- 마치며
1. 설명
오늘도 팩터리 메소드 후속편입니다.
목적은 "개발자에게 조금이라도 더 편리하고 에러 발생 가능성을 낮추기 위해서" 입니다.
지난번에는 정적 팩토리 메소드 패턴을 설명해드릴 때, 메소드 이름을 통해 생성자 메소드의 변수에 대한 정보를 알려드렸습니다.
오늘은 바로 코드를 통해 빌더 패턴에 대해 설명드리려고 합니다.
우선 매우 기본적인 클래스를 만들었습니다.
getter setter 메소드 있고 생성자 있는 무난한 클래스입니다.
하지만 이번에도 생성자 메소드 매개변수로 같은 String 타입이 두가지 있다는 점이 매우 신경쓰입니다.
요즘 IDE는 힌트를 주지만 순서를 바꿔치기 하게 되는 경우가 많다는 거죠.
위 코드 처럼 순서를 바꿔치기 할 수 있습니다.
그러한 문제에 대한 솔루션으로 빌더 패턴이 있습니다.
빌더 패턴을 사용시 아래와 같이 클래스 생성이 가능합니다.
2. 적용하기
빌더 패턴은 다음과 같은 순서를 통해 진행합니다.
- 생성자 메소드를 private으로 변경하여 캡슐화한다.
- 빌더로 사용할 내부 정적 클래스를 생성한다. 클래스명은 일반적으로 Builder, 또는 부모클래스명 + Builder 를 사용합니다.
- 대상 클래스 생성자의 매개변수를 매개변수 이름으로 메소드화하고 Builder를 리턴한다.
- 마지막으로 build 메소드를 통해 인스턴스를 리턴한다.
아래 코드에서 번호와 매칭이 가능합니다.
// 주석으로 번호 추가하기.
아래 코드를 보시면 지난번 정적 팩토리 메소드 패턴이나 일반 생성자 메소드보다 확실히 빌더 패턴이 코드에서 가독성이 더 좋다는 것을 알 수 있습니다.
// 메소드 비교
3. 장/단점
그렇다고 모든 클래스에 빌더패턴을 사용해야 좋다는 건 아니라고 봅니다.
빌더 패턴도 트레이드 오프가 존재하기 때문이지요.
제가 생각하는 빌더 패턴의 장점으로는 가독성이 뛰어나다는 점입니다.
하지만 단점은 builder 패턴은 생성자에 필요한 모든 매개변수의 입력을 강제할 수 없어서 컴파일 에러를 잡기가 어렵다는 점이 있을 수 있습니다.
4. Lombok
Lombok 에서는 클래스/타입 레벨에서 선언하는 @Builder 라는 어노테이션이 있습니다.
@Builder 어노테이션도 선언하면 컴파일시 같은 빌더 패턴이 적용된 코드를 생성해주기때문에 Lombok 사용시에는 Builder 코드를 작성할 필요가 없어집니다.
참고하시면 좋을 것 같네요.
5. 마치며
저의 다른 자료들도 참고 바랍니다.
- 🌱 Blog (Medium) : https://medium.com/@beanskobe
- 🌱 Blog (티스토리) : https://vince-kim.tistory.com/
- 📫 Portfolio (포트폴리오) : https://romantic-golick-a520aa.netlify.app
- 📫 Website (웹사이트) : https://romantic-golick-a520aa.netlify.app
- ✏️ LinkedIn (링크드인) : https://www.linkedin.com/in/joo-hyuk-kim/
- 🌎 Contact me : beanskobe@gmail.com
읽어주셔서 감사합니다!