본문 바로가기
Java/Elegant Objects

[엘레강트 오브젝트] 1. 출생 - (2) 생성자 하나를 주 생성자로 만드세요

by 잭피 2021. 9. 2.

생성자는 새로운 객체에 대한 진입점입니다

몇 개의 인자를 전달받아, 어떤 일을 수행한 후, 임무를 수행할 수 있도록 객체를 준비시킵니다

class Cash {
	private int dollars;
	Cash(int dlr) {
		this.dollars = dlr;
	}
}

현재 하나의 생성자가 있고, 인자로 dlr을 받아 private 변수 dollars 프로퍼티에 캡슐화합니다

 

이 책에서 권장하는 방식에 따라 올바르게 클래스를 설계한다면, 클래스는 많은 수의 생성자와 적은 수의 메서드를 포함할 것입니다 → 생성자의 수가 메서드의 수보다 더 많아집니다

 

사실 생성자의 개수가 더 많을수록 클래스는 더 개선되고, 사용자 입장에서 클래스를 더 편하게 사용할 수 있습니다

new Cash(30);
new Cash(29.95, "USD");
new Cash("$29.95");

 

모두 동일하게 행동하는 객체를 생성합니다

생성자가 많아질수록 클라이언트가 클래스를 더 유연하게 사용할 수 있게 됩니다

하지만, 메서드가 많아질수록 클래스를 사용하기는 더 어려워집니다

즉, 메서드가 많아지면 클래스의 초점이 흐려지고 SRP(Single Responsiblility Principle)을 위반합니다

하지만 생성자가 많아지면 유연성이 향상됩니다

 

생성자의 주된 작업은 제공된 인자를 사용해 캡슐화하고 프로퍼티를 초기화하는 일입니다

이런 초기화 로직을 단 하나의 '주 생성자'에만 위치시키고 다른 '부 생성자'들이 이 주 생성자를 호출하도록 합니다

class Cash {
	private int dollars;
	Cash(float dlr) {
		this((int) dlr);
	}
	Cash(String dlr) {
		this(Cash.parse(dlr));
	}
	Cash(int dlr) {
		this.dollars = dlr;
	}
}

'주 생성자'는 모든 '부 생성자' 뒤에 위치시키면 유지보수성이 좋습니다

 

 

이 글은 학습을 위해 “엘레강트 오브젝트" 책 내용을 정리한 글입니다.

저작권 관련 문제가 있다면 바로 삭제하도록 하겠습니다

댓글