빌더는 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴입니다. [ 빌더 패턴(Builder Pattern)의 장점 ] 필요한 데이터만 설정할 수 있음 유연성을 확보할 수 있음 가독성을 높일 수 있음 변경 가능성을 최소화할 수 있음
복잡한 객체들을 단계별로 . . . ~~ 해서 이어가는 것 (생성자를 생성하지 않고!)
그냥 평범한 자바 프로젝트 생성
User
public class User { private int id; private String username; private String password; private String email; //static 메서드를 통해서 객체를 만들었다. 이러면 뭐가 좋나? public static User builder() { return new User(); } //메서드 이름이 그냥 id public User id(int id) { this.id = id; return this; //this는 자기자신. 즉, User를 리턴해줌 } public User username (String username) { this.username = username; return this; } public User password (String username) { this.password = password; return this; } public User email (String username) { this.email = email; return this; } //User.builder 객체가 실행되는 것 자체가 유저 객체 public static void main(String[] args) { User user = User.builder().id(1).username("ssar"); //이렇게 계속 연결해서 적을 수 있는 이유 -> 자기 자신을 리턴하기 때문! //이패턴을 쓰면 생성자가 없어도 한 줄에 내가 넣고싶은 것만 넣고, 빼고 할 수 있음 //set쓰는 것보다 훨씬 간편 //자바스크립트에서도 .~.~하면서 계속 연결했잖아 -> 빌드업 패턴 System.out.println(user); } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", email='" + email + '\'' + '}'; } }
이런 식으로 생성자를 만들지 않을 수 있다는 장점이 있다.
@Builder는 실행이 마치 생성자처럼 되는 것 !
//User.builder 객체가 실행되는 것 자체가 유저 객체 public static void main(String[] args) { User user = User.builder().id(1).username("ssar"); User user2 = User.builder().id(2).username("cos").password("1234"); User user3 = User.builder().username("cos").password("1234").id(3); //객체 만들고, id넣고, username넣고, password넣고 ... System.out.println(user3); }
순서가 상관 없다는 장점이 있다. (생성자는 순서가 중요했음!)
완성
public class User { private Integer id; private String username; private String password; private String email; public static User builder(){ return new User(); } // 메서드 public User id(int id){ this.id = id; return this; } public User username(String username){ this.username = username; return this; } public User password(String password){ this.password = password; return this; } public User email(String email){ this.email = email; return this; } // 메인 public static void main(String[] args){ User user = User.builder().id(1).username("ssar"); User user2 = User.builder().id(2).username("cos").password("1234"); User user3 = User.builder().username("love").password("1234").id(3); // 계속 연결해서 적을 수 있는 이유가 자기자긴을 계속 리턴 가능 // 생성자 없어도 한줄에 다 넣을 수 있음 // 계속 생성자 처럼 사용 가능 // 순서가 상관 없다. user.id(1); System.out.println(user3); } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", email='" + email + '\'' + '}'; } }
이거 롬복이 들고있음 !
Share article