class Position {
private int position = 0;
public Position() {
this.position = 0;
}
public Position(int position) {
this.position = position;
}
constructor chaining에 대해서 알아볼까요?
- 0으로 초기화는 한 군데서만 해주면 좋을 것 같아요. 중복 코드는 최대한 제거해주세요!
Constructor chaining은 생성자들을 연속적으로 부르는 것이다.
this()
키워드를 사용해서 같은 클래스내의 생성자들을 연쇄적으로 호출super()
키워드를 사용해서 부모 클래스로부터 생성자 호출하기public class Person {
private final String firstName;
private final String middleName;
private final String lastName;
private final int age;
//getters, equals and hashcode
}
어떤 사람은 middleName
이 없을 수도 있다.
public Person(String firstName, String middleName, String lastName, int age) {
this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
this.age = age;
}
public Person(String firstName, String lastName, int age) {
this(firstName, null, lastName, age);
}
이 생성자는 middle name이 들어가지 않았다. 여기서 this() 키워드를 사용하고 있는데, 이 키워드는 항상 생성자의 첫 줄에 와야한다. 클래스 내부에서 생성자들의 순서는 중요하지 않다.
public class Customer extends Person {
private final String loyaltyCardId;
//getters, equals and hashcode
}
public Customer(String firstName, String lastName, int age, String loyaltyCardId) {
this(firstName, null, lastName, age, loyaltyCardId);
}
public Customer(String firstName, String middleName, String lastName, int age, String loyaltyCardId) {
super(firstName, middleName, lastName, age);
this.loyaltyCardId = loyaltyCardId;
}
첫 번째 생성자는 this()
키워드를 이용해서 두 번째 생성자에 연결하고 있다.
한 편 두 번째 생성자는 super()
키워드를 이용하고 있다.
중복을 피할 수 있다. DRY(Don't Repeat Yourself).
가독성을 향상 시켜준다.