ssung_항해일지/항해99_Spring_입문, 숙련, 심화

spring - 13일차

ssungcohol 2023. 2. 17. 02:26

builder 패턴

 - 복잡한 Object들을 단계별로 구축할 수 있는 생성 디자인 패턴

 - 동일한 구성코드를 사용하여 다양한 타입과 표현을 제공

 - 생성자를 가독성 좋게 만들어주는 패턴이라고 할 수 있음

 - 객체를 생성할 수 있는 builder() 함수를 통해 얻고 거기에 셋팅하고자 하는 값을 셋팅하고 마지막에 build()를 통해 빌더를 작동시켜 객체를 생성

@Builder
Bag bag = Bag.builder()
		.name("name")
                .money(10000)
                .memo("memo")
                .build();

 

장점

 - 필요한 데이터만 설정 가능

 - 유연성 확보 (설정 값의 순서가 어떠하든 상관 없다)

 - 가독성을 높임

 - 불변성 확보


옵션

builderMethodName

- @Builder 어노테이션을 사용하면 빌더를 생성하는 메서드의 이름은 기본 값인 builder()이다. 이를 새롭게 네이밍 할 수 있는 어노테이션 값이다.

 - 보통 기본 값인 builder()를 그대로 사용한다.

Bag bag = Bag.builder()

 

buildMethodName

- builder()로 얻은 빌더에 필드 값들을 입력하고 마지막에 객체를 생성하는 동작인 빌드 메서드의 이름을 네이밍 할 수 있는 어노테이션

 - 기본 값은 build()로 create() 등 필요한대로 네이밍하면 된다. 이에 맞춰 빌더 메소드도 같이 리네이밍

Bag bag = Bag.builder()
		builder();

 

builderClassName (무슨 말인지 모르겠음...)

-

 

toBuilder (무슨 말인지 모름..2)

 - boolean 값으로 설정할 수 있는 어노테이션 값으로 기본 값은 false인데, 이 값을 true로 설정 시 빌더로 만든 인스턴스에서 toBuilder() 메서드를 호출해 그 인스턴스 값을 베이스로 빌더 패턴으로 새로운 인스턴스를 생성할 수 있다.

 - 기본 값인 false로 설정 시 toBuilder() 메서드 자체가 존재하지 않는 메서드라는 에러가 발생

Bag bag1 = Bag.builer()
		.name("name")
        .money(10000)
        .memo("memo")
        .build();
        
Bag bag2 = bag1.toBuilder().money(8000).build();
728x90

'ssung_항해일지 > 항해99_Spring_입문, 숙련, 심화' 카테고리의 다른 글

spring - 15일차  (0) 2023.02.19
spring - 14일차  (0) 2023.02.18
spring - 11일차  (0) 2023.02.15
spring - 10일차  (0) 2023.02.14
Spring - 9일차  (0) 2023.02.11