[엘레강트 오브젝트] 1-3장 생성자에 코드를 넣지 마세요

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

🌵생성자에 코드를 넣지 마세요

이 장의 내용은 생성자에 코드를 넣지않음으로써 인자값을 퓨어하게 유지하고 객체를 사용 시점에 파싱을하던 변환을하던 하라는 뜻이다(인자값을 다른 타입의 객체로 감싸는건 가능)

즉 생성자는 말 그대로 생성만 하라는것

책에서 설명하는 올바른 예

//생성자는 필드값을 초기화만 해주고 intValue()를 사용한 "시점"에 파싱된 값 반환
class StringAsInteger implements Number {
	private String text;
    public StringASInteger(String txt) {
    	this.text = txt;
    }
    public int intValue() {
    	return Integer.parseInt(this.text);
    }
}

책에서 설명하는 잘못된 예

//생성자에서 값을 변환하고 intValue()를 사용해 "이미" 변환된 값 반환
class StringAsInteger implements Number {
	private int num;
    public StringASInteger(String txt) {
    	this.num = Integer.parseInt(txt);
    }
    public int intValue() {
    	return this.num;
    }
}

실제로 올바른 예 에서의 코드가 실행속도가 더 빠르다고 한다.

다음으로

생성자에어 직접 파싱을 수행하는 코드는 최적화가 불가능 합니다. 이 경우에는 객체를 만들 때마다 매번 파싱이 수행되기 때문에 실행 여부를 제어할 수 없습니다.

이 말은 예를 들어 인자값이 여러개가 넘어왔을때 단 하나의 인자값만을 사용하는 경우에도 모든 인자값을 파싱하는 작업을 CPU가 하기 때문에 성능적으로도 좋지않고 인자값에대한 제어권도 잃게 된다는 것 이다.

느낀점

1-2장에서의 느낀점에서 유효성검증을 어디서 해야하는지에 대한 고민을 했었는데 파싱같은 작업은 넘어온 값 자체를 건드는 작업이기에 사용시점에 파싱을 하는건 옳다고 생각한다 하지만 여전히 유효성검증같은 경우엔 넘어온 값에 대해 신뢰성을 주는 작업이라 생각하기에 유효성검증은
클래스 안에서 하는게 응집력도 올라가고 좋지 않나 생각한다.

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

0개의 댓글