자동차 경주를 구현하다가 자동차의 출력 부분에서 고민이 생겼다.
자동차의 이름과 위치를 - 로 출력해주어야 한다.
car1 : ---
: car1은 3만큼 움직였다.
처음 나는 출력할 때 Car의 toString()에서 위처럼 포맷팅하여 구현했다.
public String toString() {
return String.format("%s : %s",
name.value(), "-".repeat(position.value()));
}
위처럼 작성한 이유
- toString()은 요구사항의 형식도 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환한다고 생각해서
- getter의 사용을 피하기 위해
toString()의 용도가 무엇일까요?
객체의 정보가 어떤지 개발자가 확인하는 용도이지 요구사항에 맞게 출력을 하는 것은 옳지 않다.
getter를 왜 피해야 하죠?
요구사항에서 Car는 자신의 정보
(이름, 위치)를 전달해야 하는 역할이 생겼기 때문에 이럴 땐 getter를 작성해 주어야 한다.
Car의 이름과 위치를 반환하는 getter 생성
Car {
private final Name name;
private final Position position;
public String getName() {
return name.value();
}
public int getPosition() {
return position.value();
}
}
view에서 차의 이름과 위치를 받아 요구사항 출력에 맞게 구현
OutputView {
public static void printCar(Car car) {
System.out.printf("%s : %s",
car.getName(), "-".repeat(car.getPosition()));
}
}