생성자 체이닝(Constructor Chaining)이란?
생성자 체이닝은 생성자가 2개 이상일 경우, 전체 인스턴스 필드의 값 초기화를 담당하는 하나의 주 생성자를 두고 이 외의 부 생성자들은, 자신보다 상위의 부 생성자를 호출하는 체이닝 구조를 거쳐 최종적으로 주 생성자를 호출하여 객체를 생성하도록 만드는 방식이다.
즉, 실제 객체 초기화를 담당하는 주 생성자 이 외에는 상위 생성자를 호출해나가는 구조인 것이다.
적용
기존 코드
public Player(final String name) {
super(Cards.createEmpty());
this.name = new Name(name);
}
public Player(final String name, final Cards cards) {
super(cards);
this.name = new Name(name);
}
생성자 체이닝 적용
public Player(final String name) {
this(new Name(name), Cards.createEmpty());
}
public Player(final Name name, final Cards cards) {
super(cards);
this.name = name;
}
- 생성자들 중, 가장 아래에 주 생성자를 배치
- 부 생성자들은 체이닝 순서에 맞게 순차적으로 주 생성자 위쪽에 배치
사용 목적
1. 중복 로직 제거
- 기존 코드를 보면 `this.name = new Name(name);` 코드가 두 생성자에서 중복되고 있다.
지금은 인스턴스 필드가 간단하게만 존재하지만, 인스턴스 필드의 종류와 오버로드가 더 많다면 중복 코드가 훨씬 많이 생성될 것이다.- 여기에 생성자 체이닝 적용을 통해 부 생성자에서 this 키워드를 통해 주 생성자를 호출하도록 함으로써
`코드 중복을 제거` 및 `생성자의 재사용`이 가능하다
- 여기에 생성자 체이닝 적용을 통해 부 생성자에서 this 키워드를 통해 주 생성자를 호출하도록 함으로써
2. 유지보수성 향상
- `생성자 체이닝 패턴 적용`을 통해 중복 코드가 제거되고, 인스턴스 필드 초기화 책임이 하나의 생성자(주 생성자)에만 존재하므로
변경이나 확장이 더 간단하다.
3. 가독성 향상
- 중복 코드가 제거되고, 필드 초기화의 책임이 하나의 생성자(주 생성자)에만 존재하며 부생성자들이 체이닝 순서에 맞게 순차적으로 배치되기 때문에 객체 필드 초기화의 흐름을 읽을 수 있어 가독성이 향상
'Language > Java' 카테고리의 다른 글
[Java] Java 반복 작업 수행 시, For-Loop와 Stream 사이 성능 비교 (0) | 2024.04.06 |
---|---|
[Java] Fluent API란? (feat. JDBC에 적용해보기) (0) | 2024.04.04 |
[Java] 자바에서 라인을 ‘안전하게’ 개행하는 방법 (2) | 2024.03.01 |
[Java] 클래스 멤버는 각자의 위치가 존재한다 (0) | 2024.02.28 |
[Java] LinkedHashMap을 통한 기초 캐싱 (0) | 2024.02.25 |