우테코 레벨1 자동차 미션을 진행하면서 MVC에 대해 공부해보았다. 공부한 것을 토대로 리팩토링을 진행했는데 이때 View가 어떤 역할까지 책임져야 하는지 궁금했다.
public static List<Car> getCars() {
return Arrays.stream(InputView.getCarNames())
.map(carName -> new Car(carName, new RandomMovingPolicy()))
.collect(toList());
}
위는 수정전 코드이다. View class에 있는 함수인데 내부에 메서드도 많이 없어서(이렇게 안하면 도메인에서 생성자로 받을 때 변환을 해줘야 해서...) 육안상으로 예쁜 코드를 만들자는 취지로 사용자에게 입력을 받고 도메인 객체로 변환까지 한 후에 controller로 return해주는 형식을 취했다.
하지만 이렇게 하면 View와 도메인의 의존성이 강해져 유지보수하기 어려운 코드가 될 수 있다.
public static List<String> getCars() {
return Arrays.stream(InputView.getCarNames())
.collect(toList());
}
그래서 위와 같이 View가 그저 List<String>
을 return해 주는 형식으로 수정했다.
View는 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.
예쁜 것에 중점을 두기 보다 서로 간의 책임과 협력에 좀 더 중점을 둬야 한다는 것을 깨달았다.