spring boot 를 공부하던 도중 객체생성을 할 때 @Builder 를 자주 쓰길래,
무슨역할인지 알아보려합니다.
우선 @Builder 는 어노테이션이라 간편하게 쓸수있게 만들어준 거고,
자세한 역할을 알기위해서는 builder 에 대해 공부를 해볼까 합니다.
dto
@Getter @Setter @ToString public class MemberDto { private String name; private int age; private int height; }
contoller
@Controller public class BoardController { @GetMapping public String board() { MemberDto memberDto = new MemberDto(); memberDto.setName("이진우"); memberDto.setAge(20); memberDto.setHeight(178); System.out.println(memberDto); return "index"; } }
결과적으로 set 을 이용해서 모두 기입을 해줘야 됩니다.

dto
@Getter @Setter @ToString public class MemberDto { private String name; private int age; private int height; public MemberDto(Builder builder) { this.name = builder.name; this.age = builder.age; this.height = builder.height; } public static class Builder { private String name; private int age; private int height; public Builder setName(String name) { this.name = name; return this; } public Builder setAge(int age) { this.age = age; return this; } public Builder setHeight(int height) { this.height = height; return this; } public MemberDto build() { return new MemberDto(this); } } }
controller
@Controller public class BoardController { @GetMapping public String board() { MemberDto user1 = new MemberDto.Builder() .setName("이진우") .setAge(20) .setHeight(170) .build(); System.out.println(user1); MemberDto user2 = new MemberDto.Builder() .setName("홍길동") .setAge(18) .build(); System.out.println(user2); return "index"; } }

후 출력해보면 같은 값이 출력되지만,
dto 에서 매번 오버로딩 할 필요 없이 builder 패턴으로 생성해주면
어디서든 때에 맞은 객체생성을 해줄 수 있어 가독성과 유연성이 좋습니다.
이제 빌드에 dto 내부에서도 코드가 길어지기 때문에
lombok 에서 지원해주는 @Build 를 쓰게되면
코드가 더 간편해질수있습니다.
dto
@Getter @Builder @ToString public class MemberDto { private String name; private int age; private int height; }
controller
@Controller public class BoardController { @GetMapping public String board() { MemberDto user1 = MemberDto.builder() .name("이진우") .age(20) .height(170) .build(); System.out.println(user1); MemberDto user2 = MemberDto.builder() .name("홍길동") .age(18) .build(); System.out.println(user2); return "index"; } }

위 코드처럼 @Builder 선언을 해주면 Builder 클래스 생성과 set 선언 필요 없이
dto 에 선언되어있는 변수명만으로 객체 생성을 가능하게 해줄수있습니다.