Design Pattern

점층적 생성자 패턴(Telescoping Constructor Pattern)

공기팝님 2022. 3. 19. 02:16
반응형


클래스를 설계할 때 필수로 받아야 할 인자와 선택적으로 받아야 할 인자가 구분될 때

JAVA에서, 이러한 클래스들을 객체화하는 3가지 디자인 패턴을 알아보겠습니다.

이중 가장 먼저 점층적 생성자 패턴을 먼저 알아보겠습니다.

public class User {

//회원 ID(필수)
private int id;

//회원 이름(필수)
private String userName;

//회원 별명(선택)
private String nickName;

//회원 사물함번호(선택)
private int lockerNumber;

//필수 매개뱐수를 받는 생성자
public User(int id, String userName){
    this(id,userName,null);
}

public User(int id, String userName, String nickName){
    this(id,userName,nickName,0);
}

public User(int id, String userName, String nickName, int lockerNumber){
    this.id = id;
    this.userName = userName;
    this.nickName = nickName;
    this.lockerNumber = lockerNumber;
}

@Override
public String toString() {
    return "User{" + "id=" + id + ", userName='" + userName + '\'' + ", nickName='" + nickName + '\'' + ", lockerNumber=" + lockerNumber +      '}';
  }
}

먼저 User 클래스를 생성할 때 필수 값은(id, username)으로 설정되어있고,

필수 매개변수를 받는 생성자 '그리고' 선택 매개변수를 하나씩 늘려가며 생성자를 만드는(생성자 오버 로딩) 패턴을 보실 수 있습니다.


이제 User객체를 생성해보겠습니다.

public class TelescopingConstructorPt {
    public static void main(String[] args) {
        User user = new User(1,"kihwan", null, 70); //null강제 초기화
        System.out.println("user : " + user);     
    }
}

결과

점층적 생성자 패턴

지금까지 점층적 생성자 패턴에 대하여 살펴보았습니다.

그런데, 점층적 생성자 패턴에는 치명적인 단점들이 존재합니다.

● 
매개변수가 많을수록 많은 조합이 만들어질 것이고, 생성자의 수도 그만큼 증가 -> 가독성 저하
● 
호출하는 곳에서 해당 매개변수 위치를 제대로 입력했는지 간간이 확인을 해줘야 하는 불편한 상황이 올 수 있다.
(예를 들면 위 User생성자를 호출할 때 id의 1과 lokerNumber의 70을 바꿔도 타입이 같으므로 컴파일 오류가 나지 않는다..)
● 
또한 초기화하고 싶은 필드만 포함한 생성자가 존재하지 않을 경우 원치 않는 필드까지 매개변수에 값을 지정해줘야 한다.
(예를 들면 위의 코드처럼 id, nickName, lokerNumber의 값만 초기화하고 싶은데 이 3개의 값만 초기화하는 생성자가 존재하지 않을 경우 nickName위치에 null로 강제로 초기화하고 있다.)




다음 글 에는 이러한 점층적 생성자 패턴의 단점을 보안한 자바 빈 패턴을 알아보겠습니다.

반응형