[Design pattern] 빌더 패턴 (Builder Pattern)

lnnae·2020년 4월 20일
0

Java에서 Class 객체를 생성하면, Class와 이름이 같고 값을 반환하지 않는 생성자가 가장 먼저 실행됩니다. 이때 객체의 멤버 변수를 매개변수로 받아 객체를 만들 수 있습니다.

public static class Person {
	int age;
    
    public Person(int age) {
    	this.age = age;
    }
}

public static void main(string[] args) {
	Person p = new Person(2);
}

이렇게 사용하면 됩니다.

파라미터의 개수가 많아지면?

public static class Person {
	int age;
    String name;
   	String addr;
    String job;
    
    public Person(int age, String name, String addr, String job) {
    	this.age = age;
  		this.name = name;
        this.addr = addr;
        this.job = job;
  	}
}

public static void main(string[] args) {
	Person p = new Person(2, "j kim", "seoul..", "dev");
}

이렇게 늘어난 매개변수의 개수를 아주 정확한 위치에 넣어줘야 합니다.

그래서 사용하는 것이 Builder Pattern입니다!

Builder Pattern?

빌더 패턴은 생성자에 들어가는 매개변수를 모아놓고 한번에 사용합니다. 즉, 매개 변수의 순서에 상관 없이 사용할 수 있는 장점이 있습니다. 또 불필요한 생성자를 만들지 않고 객체를 생성할 수 있습니다.

사용법

  • Person 클래스
    static class Person {
        int age;
        String name;
        String addr;
        String job;

        public Person(int age, String name, String addr, String job) {
            this.age = age;
            this.name = name;
            this.addr = addr;
            this.job = job;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    ", addr='" + addr + '\'' +
                    ", job='" + job + '\'' +
                    '}';
        }
    }
  • Builder 클래스
static class PersonBuilder {
        private int age;
        private String name;
        private String job;
        private String addr;

        public int getAge() {
            return age;
        }

        public PersonBuilder setAge(int age) {
            this.age = age;
            return this;
        }

        public String getName() {
            return name;
        }

        public PersonBuilder setName(String name) {
            this.name = name;
            return this;
        }

        public String getJob() {
            return job;
        }

        public PersonBuilder setJob(String job) {
            this.job = job;
            return this;
        }

        public String getAddr() {
            return addr;
        }

        public PersonBuilder setAddr(String addr) {
            this.addr = addr;
            return this;
        }

        public Person build() {
            Person person = new Person(age, name, addr, job);
            return person;
        }
    }

마지막 build() 메소드로 객체를 반환합니다.
getter는 없어도 됩니다.

  • 객체 생성
public static void main(String[] args) {
	        PersonBuilder builder = new PersonBuilder();

        Person p = builder
                .setAddr("Seoul")
                .setAge(3)
                .setJob("Dev")
                .setName("j kim")
                .build();

        System.out.println(p);
}

좀 더 명확하고, 이해하기 쉬워집니다.

profile
이내임니당 :>

0개의 댓글