생성자는 새로운 객체에 대한 진입점입니다
몇 개의 인자를 전달받아, 어떤 일을 수행한 후, 임무를 수행할 수 있도록 객체를 준비시킵니다
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;
}
}
'주 생성자'는 모든 '부 생성자' 뒤에 위치시키면 유지보수성이 좋습니다
이 글은 학습을 위해 “엘레강트 오브젝트" 책 내용을 정리한 글입니다.
저작권 관련 문제가 있다면 바로 삭제하도록 하겠습니다
'Java > Elegant Objects' 카테고리의 다른 글
[엘레강트 오브젝트] 2. 학습 - (3) 항상 인터페이스를 사용하세요 (0) | 2021.09.05 |
---|---|
[엘레강트 오브젝트] 2. 학습 - (2) 최소한 뭔가는 캡슐화하세요 (0) | 2021.09.05 |
[엘레강트 오브젝트] 2. 학습 - (1) 가능하면 적게 캡슐화하세요 (0) | 2021.09.04 |
[엘레강트 오브젝트] 1. 출생 - (3) 생성자에 코드를 넣지 마세요 (0) | 2021.09.02 |
[엘레강트 오브젝트] 1. 출생 - (1) '-er'로 끝나는 이름을 사용하지 마세요 (0) | 2021.09.01 |
댓글