Java에서 객체를 생성할 때 사용하는 패턴은 대표적으로 생성자 패턴과 빌더 패턴이 있다. 빌더 패턴을 사용하면 지금 채워야 할 필드가 무엇인지 명확하게 지정할 수 있다.
예시부터 보면..
public class Person { private String name; private String grade; public Person(String name, String grade){ this.name = name; this.grade = grade; } // Getter public String getName() { return name; } public String getGrade() { return grade; } }
String name = "jueun"; String grade = "4"; Person p1 = new Person(name, grade); // String type 변수가 위치가 바뀌어도 문제점 찾지 못한다. Person p2 = new Person(grade, name);
위와 같이 생산자를 이용한 생성자 패턴을 사용한 경우 변수의 타입이 같다면 두 데이터의 위치를 바꾼 뒤 변수를 생성해도 개발자는 문제점을 쉽게 찾지 못할 것이다.
이를 빌더 패턴으로 바꾸면 다음과 같다.
@Getter public class Person { private String name; private String grade; private int age; @Builder // 생성자에 @Build 어노테이션 적용 public Person(String name, String grade, int age) { this.name = name; this.grade = grade; this.age = age; } }
Lombok의 @builder를 사용해 동일한 Person 객체를 만들었다.
String name = "jueun"; String grade = "4"; Person p1 = Person.builder() .name(name) .grade(grade) .build(); }
이렇게 빌더로 접근하면 어떤 필드에 어떤 값을 채워야 할지 명확히 지정할 수 있다.
그래서 빌더 패턴이란?
복잡한 객체의 생성 과정 및 표현 방법을 분리해 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴을 말한다.
빌더 패턴의 장점은?
- 어떤 필드에 어떤 값을 채워야 할지 명확히 지정할 수 있다. - 안전성
- 필수 및 선택인자가 많아질수록 생성자 방식보다 가독성이 좋다. - 가독성
- setter 생성을 방지하기 때문에 불변객체로 만들 수 있다. - 불변성 보장
참고
'[Spring]' 카테고리의 다른 글
[Spring Security] 시큐리티 환경 설정과 로그인 (0) | 2023.01.18 |
---|---|
[Spring Security] WebSecurityConfigurerAdapter Deprecated 해결 (0) | 2023.01.18 |
[Spring] 템플릿 엔진 Mustache의 장점 (0) | 2023.01.17 |
[Spring] ERROR 1819 (HY000): Your password does not satisfy the current policy requirements. (0) | 2023.01.15 |