-
점층적 생성자 패턴(Telescoping Constructor Pattern)Design 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로 강제로 초기화하고 있다.)
반응형'Design Pattern' 카테고리의 다른 글
빌더 패턴(Builder Pattern) (0) 2022.03.19 자바 빈 패턴(JavaBeans Pattern) (0) 2022.03.19