public class Member {
private final String name; // 필수 인자
private final String location; // 선택적 인자
private final String hobby; // 선택적 인자
// 필수 생성자
public Member(String name) {
this(name, "출신지역 비공개", "취미 비공개");
}
// 1 개의 선택적 인자를 받는 생성자
public Member(String name, String location) {
this(name, location, "취미 비공개");
}
// 모든 선택적 인자를 다 받는 생성자
public Member(String name, String location, String hobby) {
this.name = name;
this.location = location;
this.hobby = hobby;
}
}
장점
new Member("홍길동", "출신지역 비공개", "취미 비공개") 같은 호출이 빈번하게 일어난다면, new Member("홍길동")로 대체 가능
단점
호출코드만으로는 각 인자의 의미를 알기 어렵다
NutritionFacts cocaCola = new NutritionFacts(240, 8, 100, 3, 35, 27);
NutritionFacts pepsiCola = new NutritionFacts(220, 10, 110, 4, 30);
NutritionFacts mountainDew = new NutritionFacts(230, 10);
장점
public class BtsVO implements Serializable{
//1. privat 생성자 필요 -- 모든 선택적 인자를 다 받은 생성자
private BtsVO(String code, String name, String url) {
super();
this.code = code;
this.name = name;
this.url = url;
}
private String code;
private String name;
private String url;
public String getCode() {
return code;
}
public String getName() {
return name;
}
public String getUrl() {
return url;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((code == null) ? 0 : code.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
//상태비교 방법 제공★★
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
BtsVO other = (BtsVO) obj;
if (code == null) {
if (other.code != null)
return false;
} else if (!code.equals(other.code))
return false;
return true;
}
@Override
public String toString() {
//url은 외부에 노출되면 안되니까 뺐음 -- 상태확인 방법 제공
return "BtsVO [code=" + code + ", name=" + name + "]";
}
public static BtsVOBuilder getBuilder() {
return new BtsVOBuilder(); //객체 생성
}
//2. builder 이너클래스, 외부에서 쓸 녀석
public static class BtsVOBuilder{
//빌드할 객체가 build()에도 똑같이 있어야 한다.
private String code;
private String name;
private String url;
//4. 마치 setter와 같은 역할을 하고 있는 현재 가지고 있는 상태와 이름이 동일한 메서드, 리턴타입이 존재
//이렇게 하면 .으로 체인을 이어갈 수 있다.
public BtsVOBuilder code(String code) {//setter의 역할 (기본 setter와의 차이)
this.code = code;
return this;
}
public BtsVOBuilder name(String name) {//setter의 역할 (기본 setter와의 차이)
this.name = name;
return this;
}
public BtsVOBuilder url(String url) {//setter의 역할 (기본 setter와의 차이)
this.url = url;
return this;
}
//3. 이게 꼭 있어야한다.
public BtsVO build() {
return new BtsVO(code, name, url);
}
}
}
public BtsVO build() {
return new BtsVO(code, name, url);
}
public BtsVOBuilder code(String code) {
this.code = code;
return this;
}
NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohdydrate(27);
장점