ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 빌더 패턴
    ETC 2020. 10. 12. 18:02
    반응형

    빌더 패턴은 객체를 생성할 때 사용하는 패턴의 하나이다.

     

     

     

    빌더 패턴의 장점

    1. 불필요한 생성자를 제거
    2. 데이터 순서와 상관없이 객체를 생성할 수 있게 해 줌

     

     

    빌더 패턴의 예

    먼저 빌더 클래스를 통해 생성하기 원하는 Info라는 클래스가 다음과 같이 선언되어 있다고 하자.

    public class Info {
    	
        private String name;
        private int age;
    }
    

     

    1. Info 객체 생성을 대행해줄 빌더 클래스인 InfoBuilder 작성

    public InfoBuilder {
    	
        private String name;
        private int age;
        
        public InfoBuilder setName(String name) {
        	this.name = name;
            return this;
        }
        public InfoBuilder setAge(int age) {
        	this.age = age;
            return this;
        }
        
        public Info build() {
        	return new Info(name, age);
        }
    }
    

     

    빌더 클래스 안에 실제 생성하고자 하는 객체의 생성 작업에 필요한 멤버 변수들과 동일한 멤버 변수를 선언한다.

    멤버 변수의 setter를 각각 생성하고 각 setter는 빌드 클래스의 객체를 반환하도록 한다.

    build()를 호출하면 Info 타입 객체를 생성하게 된다.

     

    2. InfoBuilder 객체를 통해 Info 개체를 생성하는 방법

    InfoBuilder infoBuilder = new InfoBuilder();
    
    Info info = infoBuilder
    		.setName("Dave")
                    .setAge(28)
                    .build();
    

     

     

     

    롬복을 사용한 빌더 패턴

    롬복(lombok) 플러그인을 사용하는 경우 클래스에 @Builder 애노테이션을 붙여 빌더 패턴 클래스를 간단히 만들 수 있다.

    위의 예를 롬복 플러그인을 통해 리팩터링 하면 다음과 같다.

    @Builder
    public class Info {
    	
        private String name;
        private int age;
    }
    
    Info info = Info.Builder()
        .name("Dave")
        .age(28)
        .build();
    

     

    보는 바와 같이 코드를 매우 간략하게 만들 수 있고 가독성 또한 좋아진다.

     

     

    롬복 빌더 클래스의 멤버 변수 초기값 설정

    빌더를 통해 객체를 생성할 때 특정 멤버 변수를 초기화할 값이 주어지지 않으면 멤버 변수의 데이터 타입에 따라 0 / null / false 중 하나로 초기화 되게 된다. 만약 원하는 값으로 초기화하고자 한다면 다음과 같이 멤버 변수 선언부에 @Builder.Default를 붙여준다.

    @Builder
    class Info {
    	
        private String name;
        
        @Builder.Default 
        private int age = 20;
    }
    

     

    멤버 변수인 나이를 지정하지 않으면 초기값으로 20을 사용하여 객체를 생성하게 된다.

     

    'ETC' 카테고리의 다른 글

    로지텍 keys to go 사용기  (0) 2021.06.27
    IP주소 확인  (0) 2020.12.08
    vim 커스터마이징  (0) 2020.09.21
    Blink 앱을 활용한 iPad 코딩  (3) 2020.09.17
    Docker 개념 정리  (0) 2020.09.06

    댓글

Designed by Tistory.