반응형
여승철
INTP 개발자
여승철
  • 분류 전체보기 (376)
    • CS (16)
      • 면접 준비 (7)
      • 운영체제 (0)
      • 네트워크 (2)
      • HTTP (6)
      • 스프링(Spring) IoC 컨테이너 (0)
      • 알고리즘 (1)
    • Web (13)
    • AWS (6)
    • Java (43)
    • JSP & Servlet (65)
      • 개념 (42)
      • 실습 (23)
    • Spring Framework (33)
    • Spring Boot (10)
    • Spring Data (22)
      • JPA (14)
      • Query DSL (7)
      • Redis (1)
    • Spring Security (9)
    • Spring Batch (4)
    • MyBatis (10)
    • Front-End (51)
      • JS (27)
      • Vue.js (17)
      • React (5)
      • JQuery (0)
      • d3.js (2)
    • DBMS (24)
      • SQL, RDBMS (16)
      • MongoDB (5)
      • Redis (3)
    • Kafka (3)
    • 리눅스 (Linux) (4)
    • 디자인 패턴 (3)
    • VCS (8)
    • API (0)
    • TOOL (3)
    • Reading Book (28)
      • 이펙티브 자바 (11)
      • Clean Code (10)
      • 1분 설명력 (4)
      • HOW TO 맥킨지 문제해결의 기술 (3)
    • C# (4)
    • NSIS (6)
    • ETC (11)

블로그 메뉴

  • 홈
  • 태그

인기 글

태그

  • jsp
  • 회원 관리
  • controller
  • HTTP
  • 환경 세팅
  • servlet
  • JDBC
  • 이펙티브 자바
  • 게시판
  • 디자인 패턴
  • 맥킨지
  • 로그인
  • 스트림
  • querydsl
  • mybatis
  • ubuntu
  • EC2
  • Dao
  • Spring Batch
  • JSTL

최근 댓글

최근 글

hELLO· Designed By 정상우.
여승철

INTP 개발자

[이펙티브 자바] 생성자에 매개변수가 많다면 빌더를 고려하라
Reading Book/이펙티브 자바

[이펙티브 자바] 생성자에 매개변수가 많다면 빌더를 고려하라

2022. 12. 11. 19:47
반응형

생성자나 정적 팩터리에 선택적 매개변수가 많을 때 대응하기가 어렵다.

매개변수가 많은 경우 어떤 식으로 개발자들은 처리했는지 다음을 봐보자.

 

 

1. 점층적 생성자 패턴


프로그래머들은 선택적 매개변수에 대응하는 방법으로 점층적 생성자 패턴을 이용하였다.

 

필수 매개변수만 받는 생성자

필수 매개변수 + 선택 매개변수 1개를 받는 생성자

필수 매개변수 + 선택 매개변수 2개를 받는 생성자

...

 

형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려 만드는 방식이다.

 

보통 이런 점층적 생성자 패턴 방법을 사용하면 사용자가 설정하길 원치 않는 매개변수까지 포함할 수 있는데, 어쩔 수 없이 그런 매개변수에도 값을 지정해줘야 한다. 때문에 매개변수 개수가 많아지면 클라이언트 코드의 가독성 및 작성이 어려워진다.

 

 

 

 

2. 자바빈즈 패턴


매개변수가 없는 생성자로 객체를 만든 후, 세터 메소드들을 호출해 원하는 매개변수의 값을 설정하는 방식

Student student = new Student();
student.setName("Kim");
student.setAge(25);
student.setEmail("dutmdcjf@gmail.com");
student.setGender("male");
  • 객체 하나를 만들려면 메소드를 여러 개 호출해야 한다.
  • 객체가 완전히 완성되기 전까지 일관성이 무너진 상태에 놓이게 된다.
  • 클래스를 불변으로 만들 수 없다. 때문에 스레드 안전성을 얻으려면 프로그래머가 추가 작업을 해주어야 한다.

 

 

 

 

3. 빌더 패턴


점층적 생성자 패턴의 안전성
+
자바빈즈 패턴의 가독성
public class Student {
	...
    
    public static class Builder {
    
    	private String name = "";
        private int age = 0;
        private String email = "";
        private String gender = "";
    	
        public Builder name(String name) {
        	this.name = name;
            return this;
        }
        
        public Builder age(int age) {
        	this.age = age;
            return this;
        }
        
        public Builder email(String email) {
        	this.email = email;
            return this;
        }
        
        public Builder gender(String gender) {
        	this.gender = gender;
            return gender;
        }
    }
    
    public Student build() {
    	return new Student(this);
    }
    
    private Student(Builder builder) {
    	name = builder.name;
        age = builder.age;
        email = builder.email;
        gender = builder.gender;
    }
}

//사용
Student student = new Student.Builder()
		.name("Kim")
        .age(25)
        .email("dutmdcjf@gmail.com")
        .gender("male")
        .build();
반응형

'Reading Book > 이펙티브 자바' 카테고리의 다른 글

[이펙티브 자바] try-finally 보다 try-with-resources 사용하자  (0) 2022.12.12
[이펙티브 자바] 불필요한 객체 생성을 피하고, 다 쓴 객체 참조를 해제하자  (0) 2022.12.11
[이펙티브 자바] 자원 직접 명시보다는 의존 객체 주입을 사용하기  (0) 2022.12.11
[이펙티브 자바] private 생성자나 열거 타입으로 싱글턴임을 보증하라  (0) 2022.12.11
[이펙티브 자바] 생성자 대신 정적 팩터리 메소드를 고려하라  (0) 2022.12.11
    여승철
    여승철

    티스토리툴바