-
반응형
빌더 패턴은 객체를 생성할 때 사용하는 패턴의 하나이다.
빌더 패턴의 장점
- 불필요한 생성자를 제거
- 데이터 순서와 상관없이 객체를 생성할 수 있게 해 줌
빌더 패턴의 예
먼저 빌더 클래스를 통해 생성하기 원하는 Info라는 클래스가 다음과 같이 선언되어 있다고 하자.
public class Info { private String name; private int age; }
1. Info 객체 생성을 대행해줄 빌더 클래스인 InfoBuilder 작성
public InfoBuilder { private String name; private int age; public InfoBuilder setName(String name) { this.name = name; return this; } public InfoBuilder setAge(int age) { this.age = age; return this; } public Info build() { return new Info(name, age); } }
빌더 클래스 안에 실제 생성하고자 하는 객체의 생성 작업에 필요한 멤버 변수들과 동일한 멤버 변수를 선언한다.
멤버 변수의 setter를 각각 생성하고 각 setter는 빌드 클래스의 객체를 반환하도록 한다.
build()를 호출하면 Info 타입 객체를 생성하게 된다.
2. InfoBuilder 객체를 통해 Info 개체를 생성하는 방법
InfoBuilder infoBuilder = new InfoBuilder(); Info info = infoBuilder .setName("Dave") .setAge(28) .build();
롬복을 사용한 빌더 패턴
롬복(lombok) 플러그인을 사용하는 경우 클래스에 @Builder 애노테이션을 붙여 빌더 패턴 클래스를 간단히 만들 수 있다.
위의 예를 롬복 플러그인을 통해 리팩터링 하면 다음과 같다.
@Builder public class Info { private String name; private int age; } Info info = Info.Builder() .name("Dave") .age(28) .build();
보는 바와 같이 코드를 매우 간략하게 만들 수 있고 가독성 또한 좋아진다.
롬복 빌더 클래스의 멤버 변수 초기값 설정
빌더를 통해 객체를 생성할 때 특정 멤버 변수를 초기화할 값이 주어지지 않으면 멤버 변수의 데이터 타입에 따라 0 / null / false 중 하나로 초기화 되게 된다. 만약 원하는 값으로 초기화하고자 한다면 다음과 같이 멤버 변수 선언부에 @Builder.Default를 붙여준다.
@Builder class Info { private String name; @Builder.Default private int age = 20; }
멤버 변수인 나이를 지정하지 않으면 초기값으로 20을 사용하여 객체를 생성하게 된다.
'ETC' 카테고리의 다른 글
로지텍 keys to go 사용기 (0) 2021.06.27 IP주소 확인 (0) 2020.12.08 vim 커스터마이징 (0) 2020.09.21 Blink 앱을 활용한 iPad 코딩 (3) 2020.09.17 Docker 개념 정리 (0) 2020.09.06