반응형

생성패턴 - Builer

 

해결하려는 문제

  • 복잡한 객체의 생성 방법과 표현 방법을 분리해야함
  • 생성 방법과 구성 방법 모두 캡슐화 해야함
  • (ex. 객체 생성에 필요한 파라미터가 너무 많아, 생성자 오버로딩이 과함)

 

public class Main {
    public staic void main(String[] args) {
    
    	SimpleUser simpleUser = new SimpleUser();
        
        SimpleUser simpleUser = SimpleUser.builder()
            	.id(1L)
                .name("제로베이스")
                .age(25)
                .address("서울시")
                .phoneNumber("010-1234-5678")
                .build();
                
        SimpleUser simpleUser = SimpleUser.builder()
            	.userInfo(new UserInfo())
                .userAddress(new UserAddress())
                .build();
    }
}
public class SimpleUser {
    private long id;
    private String name;
    private int age;
    private String address;
    private String phoneNumber;
    
    private SimpleUser() {
    }
    
    public SimpleUser(SimpleUserBuilder simpleUserBuilder) {
        this.id = simpleUserBuilder.uesrInfo.getId();
        this.name = simpleUserBuilder.uesrInfo.getName();
        this.age = simpleUserBuilder.uesrInfo.getAge();
        this.address = simpleUserBuilder.address.mergedAddress();
        this.phoneNumber = simpleUserBuilder.uesrInfo.getPhoneNumber();
    }
    
    public static SimplerUserBuilder builder() {
        return null;
    }
    
    public static class SimpleUserBuilder {
        private UserInfo userInfo;
        private UserAddresss userAddress;
        
        public SimpleUserBuilder userInfo(UserInfo userInfo) {
            this.userInfo = userInfo;
            return this;
        }
        
        public SimpleUserBuilder userAddress(UserAddress userAddress) {
            this.userAddress = userAddress;
            return this;
        }
        
        public SimpleUser build() {
//          return new SimpleUser(this);
            SimpleUser simpleUser = new SimpleUser();
            simpleuser.id = userInfo.getId();
        }
    }
}
import lombok.Getter;

@Getter
public class UserInfo {
    private long id;
    private String name;
    private int age;
    private String phoneNumber;
}
import lombok.Getter;

@Getter
public class UserAddress {
    private String city;
    private String citySubName;
    private String contryName;
    
    public String mergedAddress() {
        return city + citySubName + countryName;
}

 

 


반응형

+ Recent posts