[Java] 디자인패턴 - 빌더 패턴

·2024년 4월 15일
0

빌더패턴

우리가 여태까지 클래스를 생성할 때에는 생성자를 만들 때 정해뒀던 파라미터 순서에 따라 변수를 집어넣어 생성해줘야했다.

public class User{
	private String id;
    
    private String email;
    
    public User(String id, String email){
    	this.id=id;
        this.email =email;
    }

}

public static void main(String[] args){
	User user1 = new User("1001","1@gmail.com");
}

근데 이러면 IDE에서는 몰라도, 생성자를 호출 할 때 어떤 순서로 파라미터를 적어야하는지 알기 좀 귀찮다.

그래서 쓰는게 빌더패턴!

사용법

최종적으로 필요한 필드를 가지고 있는 객체를 만들기 위한 내부 클래스를 만들면 된다!

public class User{
	private String id;
    
    private String email;
    
    public User(String id, String email){
    	this.id=id;
        this.email =email;
    }
	
   static public class Builder{
   	private String id;
    private String email;
    
    public Builder();
    public Builder(User user){
    	this.id=user.id;
        this.email=user.email;
    }
    
    //setXXX대신 필드명으로 메소드를 작성함!
    public Builder id(String id){
    	this.id = id;
        return this;
    }
    
    public Builder email(String email){
    	this.email=email;
        return this;
    }
    
    public User build(){
    	return new User(id,email);
    }
   } //빌더 클래스 선언 완
}

그러면 이제

public static void main(String args[]){
	//기존 생성자
    User user1 = new User("1001","1@gmail.com");
    
    //빌더 패턴을 이용한 생성자
    User user2 =new User.Builder()
    .id("1002")
    .email("2@gmail.com")
    .build();
}

로 직관적으로 만들 수 있다.

Lombok을 이용한 빌더

클래스 위에 어노테이션을 달 경우 - 모든 필드를 사용하겠다
사용자 정의 생성자 위에 어노테이션을 달 경우 - 선택적으로 필드를 사용하겠다

즉, null값이 있을수도 있는 생성자라면, 클래스보다는 사용자 정의 생성자 위에 어노테이션을 달아줘야한다.

또, @Builder를 통해 실제 빌더 생성자 호출 시 Builder가 아닌 builder로 나오며, new를 사용하지 않아도 된다.

정리 : 빌더패턴을 쓰는 이유

  1. 생성자 호출 시 파라미터 값을 명시하기 위해
  2. 필요하지 않은 파라미터를 일일이 null로 호출하지 않고, 그냥 메소드를 선언하지 않으면 됨.
profile
풀스택 호소인

0개의 댓글