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

유사개발자·2022년 5월 25일
0
post-thumbnail

🌵생성자 하나를 주 생성자로 만드세요

이 장의 내용은 생성자 하나를 주 생성자로 만들라는 내용이다.

이 뜻은 오버로딩된 여러 생성자들중 생정자 하나를 주 생성자로 만들어
필드 변수 초기화의 역할을 주 생성자만 가지라는 뜻이다.

//올바른 예
class Cash {
	private int dollars;
    Cash(float dlr) {
    	this((int) dlr);
    }
    Cash(String dlr) {
    	this(Cash.parse(dlr));
    }
    Cash(int dlr) {
    	this.dollars = dlr;
    }
}
//잘못된 예
class Cash {
	private int dollars;
    Cash(float dlr) {
    	this.dollars = (int) dlr;
    }
    Cash(String dlr) {
    	this.dollars = Cash.parse(dlr);
    }
    Cash(int dlr) {
    	this.dollars = dlr;
    }
}

올바른 예를 보자 이런 식으로 부 생성자에서 처리된 값을 주 생성자에 넘겨 주 생성자에서 필드 변수를 초기화 한다. 반면 잘못된 예 에선 각각의 생성자가 필드 변수를 초기화 한다.
이렇게 되면 유효성 검사를 할 시 생성자 세곳에서 검증을 해야하기 때문에 유지보수성이 떨어진다.

결론으로 내부 프로퍼티는 오직 한 곳에서만 초기화해야 하며, 다른 모든 위치에서는 단순히 인자를 준비하고, 포맷팅하고, 파싱하고, 변환만 해야 한다.

느낀점

생성자 하나를 주 생성자로 만들어서 해당 영역에서만 프로퍼티를 초기화 하는방식은 매우 괜찮은 방식이라고 느꼈다. 하지만 이 책에선 생성자엔 로직이 들어가면 안된다고 했다.
그렇다면 외부에서 넘어오는 값들에 대한 검증은 어디서 하는지에 대한 고민이 생겼다
내가 알기론 해당 객체의 클래스 안에 유효성 검증로직이 있기 마련이였다 하지만 이 책을 따르면 생성자에서는 그저 포맷팅하고 파싱하고 프로퍼티 초기화만해야 한다고 한다..
그럼 객체의 프로퍼티 값을 가져오는 시점에 유효성 검증을 해야하는걸까? 그럼 값을 가져오는 메서드마다 전부 유효성 검증 로직이 들어가는데 그럴바에 주 생성자에서
그냥 유효성 검사를 하는게 낫지 않나.. 싶은 생각이 든다.

profile
개발자와 유사한 개발자입니다

0개의 댓글