[Java] 생성자 체이닝(Constructor Chaining) 기법

 

 

생성자 체이닝(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 키워드를 통해 주 생성자를 호출하도록 함으로써
      `코드 중복을 제거` 및 `생성자의 재사용`이 가능하다

 

2. 유지보수성 향상

  • `생성자 체이닝 패턴 적용`을 통해 중복 코드가 제거되고, 인스턴스 필드 초기화 책임이 하나의 생성자(주 생성자)에만 존재하므로
    변경이나 확장이 더 간단하다.

 

3. 가독성 향상

  • 중복 코드가 제거되고, 필드 초기화의 책임이 하나의 생성자(주 생성자)에만 존재하며 부생성자들이 체이닝 순서에 맞게 순차적으로 배치되기 때문에 객체 필드 초기화의 흐름을 읽을 수 있어 가독성이 향상