[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개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN