복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴.
// Basic
class Student(id: number, name: string, major: string, age: number, address: string) {
id : number;
name : string;
major : string;
age : number;
address: string;
constructor() {
this.id = id;
this.name = name;
this.major = major;
this.age = age;
this.address = address;
}
}
const student = new Student(20220103, '조준석', '정보통신', null, '서울시 노원구...');
클래스 내에 오버로딩을 통해서 생성자를 여러 개 작성하는 것을 말한다.
public class Member {
private String name; // 필수
private int age; // 필수
private String address; // 선택
private String phone; // 선택
private String email; // 선택
// 필수 매개변수를 가지는 생성자
public Member(String name, int age) {
this(name, age, null, null, null);
}
// 선택 매개변수 address가 추가된 생성자
public Member(String name, int age, String address) {
this(name, age, address, null, null);
}
// 선택 매개변수 phone이 추가된 생성자
public Member(String name, int age, String address, String phone) {
this(name, age, address, phone, null);
}
// 모든 매개변수를 가지는 생성자
public Member(String name, int age, String address, String phone, String email) {
this.name = name;
this.age = age;
this.address = address;
this.phone = phone;
this.email = email;
}
}
Member member1 = new Member("홍길동", 56);
// { name: "홍길동", age: 56, address: null, phone: null, email: null }
Member member2 = new Member("조준석", 29, "서울시 노원구", "01012345678");
// { name: "조준석", age: 29, address: "서울시 노원구", phone: "01012345678", email: null }
매개변수가 없는 생성자로 객체를 만든 후, Setter 메서드를 호출해 원하는 매개변수의 값을 설정하는 방식이다.
public class Member {
private final String name;
private final int age;
private final String address;
private final String phone;
private final String email;
public Member() {}
// Setter 메서드
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setAddress (String address) {
this.address = address;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setEmail(String email) {
this.email = email;
}
}
Member member = new Member();
member.setName('조준석');
member.setAge(29);
// { name: "조준석", age: 29 }
// 객체 일관성이 깨질 수 있으며, 불변성 객체를 만들 수 없다.
// 단순 생성자로 만들 때 예시
const student = new Student(null, '조준석', null, 29, null);
// Builder Pattern 호출 예시
const student = Student.builder().name('조준석').age(29);