티스토리 뷰

728x90

객체를 생성하는 방법

1. 점층적 생성자 패턴 (생성자에 인자를 넣어 인스턴스 생성)

2. setter를 사용한 자바빈 패턴

3. 빌더 패턴

 

결론

인자의 개수가 많아질 수록 빌더 패턴을 적용하는 것이 좋다.


단점 1. 필요없는 필도도 null과 같은 의미 없는 값으로 인자를 전달해야한다.

단점 2. 인자 수가 늘어나면 클라이언트에서 코드 작성이 어렵고, 가독성이 떨어진다.

class Member {
    private String name;
    private int age;


    public Member(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
	    Member member = new Member("Gajy", 20);
    }
}

 

장점1. 점층적 생성자 패턴과 비교했을 때, 가독성이 좋고, 필요한 필드만 set 할 수 있다.

 

단점 1. 일관성이 깨질 수 있다.

단점 2. final로 인자들을 관리 할 수 없다.

class Member {
    private String name;
    private int age;

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

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

public class Main {
    public static void main(String[] args) {
	    Member member = new Member();
        member.setName("Gajy");
    }
}

장점 1. 인자를 final로 선언하여 immutable하게 관리 가능하다.

장점 2. 가독성이 좋다.

 

단점1. 코드가 길어진다. 

class Member {
    private final String name;
    private final int age;

    private Member(Builder builder) {
        name = builder.name;
        age = builder.age;
    }

    public static class Builder {
        private final String name;
        private int age = 0;

        public Builder(String name) { //필수값은 생성자를 통해 생성
            this.name = name;
        }

        public Builder age(int age) { //선택값은 .age()로 추가 할 수 있게 하여 가독성을 높임
            this.age = age;
        }

        public Member build() {
            return new Member(this);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Member member = new Member.Builder("Gajy").build();
        Member member2 = new Member.Builder("Gajy").age(20).build();
    }
}

 

728x90

'JAVA' 카테고리의 다른 글

Function Package는 왜 많은 인터페이스를 가지고 있을까?  (0) 2022.10.31
randomAlphanumeric vs randomAlphabetic  (0) 2022.10.14
Queue 메서드 정리  (0) 2022.04.19
List<Integer> <-> int[] 변환  (0) 2022.04.19
LTS vs non-LTS version  (0) 2022.04.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31