ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #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

    댓글

Designed by Tistory.