생성자는 단점이 하나 있는데 선택적 매개변수의 수가 많아질경우 대응하기가 어려워 지는것,
예를 들어서 받아오는 매개 변수에 따라 계속해서 생성되는 생성자의 코드를 보았을 때 매개변수의
개수에 따라 호출되는 생성자를 짐작하기가 매우 혼잡해 진다.
또는 생성자를 호출 하기 위해서 내가 필요로 하지 않은 값까지 설정해 주어야 한다는 단점이 있다.
자바빈즈 패턴
자바 빈즈 패턴이란, 매개변수가 없는 생성자로 객체를 만들어 Setter를 호출하여 원하는 매개변수의
값을 설정 해주는 방식이다.
하지만 이 방법에도 심각한 단점이 있는데, 디폴트 생성자로 객체만 생성하고 필요한 매개 변수들을
Setter메소드로 값을 설정해준다고 할때 만약 설정 해야할 매개 변수의 수가 무수히 많다면
그만큼 많은 Setter 메소드를 호출해야 한다. 또한 객체가 완전히 생성되기 전까지 일관성이 무너져있다.
빌더패턴
빌더패턴은 Class에 @Builder LomBok라이브러리를 사용하면 import가 가능한데
빌더 패턴은 위의 2개의 방식의 단점을 최소화 시킨 방법으로, 빌터패턴의 장점으로는 4가지 정도가 있다.
- 내가 필요한 데이터에 대한 인자값만을 넣을수 가 있다.
- 유연성을 확보 할 수 있다.
- 코드의 가독성이 높아진다
- 변경 가능성을 최소화 할 수 있다.
User user = User.builder()
.name("KIM")
.height(180)
.build();
User의 필드에 몇개의 값이 있던 상관없이 내가 원하는 값에 대한 추가만 할 수가 있다.
생성자 방식과 다르게 변수의 선언 순서가 정해져 있지 않고 넣고싶은 자리에 넣을 수 가 있어 유연성이 증가.
Builder로 호출을 할때 각각 변수명과 값이 함께 작성되어 코드만 읽어도 어떤 값인지 한눈에 알아 볼 수있다.
빌더패턴은 Setter를 선언하지 않기 때문에 불필요한 값의 변경이 생길 일이 없다. 변경 가능성을 확실하게
줄이려면 변수를 final로 선언한다면 불변성을 더 늘릴 수 있다.
빌더패턴을 안쓰는게 좋을 때
변수의 개수가 2개이하거나 변경 가능성이 없는 경우,
객체의 생성을 자신이 아닌 라이브러리에 위임 할경우
Entity나 Domain 객체로부터 DTO를 생성하는 경우라면 직접 빌더를 생성하는 것 보다.
MapStruct나 ModelMapper와 같은 라이브러리를 통해 생성을 위임하는 게좋다.
또한 변수가 늘어날 가능성이 없거나 변수의 개수가 2개 이하일 경우 정적 팩토리 메소드를 사용하는게
코드의 길이를 줄일 수 있어 더 좋다.
변수의 개수와 변경 가능성 등을 중점적으로 보고 빌더 패턴을 적용하자!!!!
'JAVA' 카테고리의 다른 글
JAVA - Optional 사용하기 (0) | 2023.03.30 |
---|---|
RestAPI 정리 (0) | 2023.03.06 |
JAVA 9 - Collection Factory Method (0) | 2023.02.20 |
HTTP란??? (0) | 2023.02.19 |
라이브러리 , API , 프레임워크의 차이 ?? (0) | 2023.02.17 |