-
#Builder 패턴JAVA 2021. 5. 11. 12:02
객체를 생성하다보면 생성자를 만드는데에서 몇 가지의 문제점이 발생한다.
1. 필드의 인자값의 필요성에따라 생성자가 여러개가 될 수 있다.
2. 생성자의 순서에따라 잘못된 자료형을 삽입 할 수 있는 문제가 생길 수 있다. 이문제는 코드를 실행하기 전까지는 문제를 찾을 수가 없다.
3. 무분별한 생성자 사용으로 유지보수 측면에서 코드를 읽기 어려워질 수 있다.
예를들어
Order이라는 객체가 있을때
Item item = new Item(1,1300,"pancel");
이렇게 매개변수를 넣게되면 어떤 정보인지 식별하기 어렵다.
하지만 이러한 방법은 Setter를 사용함으로서 어느 정도는 극복할 수 있다.
Item item = new Item(); item.setCount(1); item.setPrice(1300); item.setName("pancel");
하지만 setter르를 사용하게되면 Object를 생성했을경우 생성된 Object가 어떠한 이유로 변경 될 가능성이 생길 수 있다는 것이기 때문에 Object에서 객체의 일관성이 깨지게 된다.
ORM기법을 사용할때 Entity에서 Setter를 만들지 않는 것이 비슷한 이유이기도 하다.
이러한 문제를 해결하기 위해서나온 대책이 Builder pattern이다.
@Builder으로 생성자를 매핑한후
@Builder public item(int count, int price, String name) { this.count = count; this.price = price; this.name = name; }
Item item = Item.builder() //Builder를 할 객체지정 .count(count) // method chaining 기법으로 매핑 .price(price) .name("pancel") .build();
해당 클래스를 변경할수 있는 방법은 리플랙션 방법외엔 없게된다. 그리고 어느 필드에 어떤 값을 채워야 할지 명확하게 파악할 수 있어 가독성이 좋아지는 장점이 있다.
'JAVA' 카테고리의 다른 글
컬렉션 프레임웍과 함수형 인터페이스 (0) 2021.04.05 인터페이스 Predicate<T> (0) 2021.04.05 람다식 (0) 2021.04.05 JRE , JDK ? (0) 2021.03.04 JAVA란? (0) 2021.03.04