자동차 경주 게임을 처음 구현할 때, 데이터를 받아 들이는 InputView 에서 모든 유효성을 검사했었다.
고민 끝에 다음은 이름을 저장하는 Name클래스에 다시 모두 옮겼었다.
객체 지향적인 설계를 공부하면서 이게 맞을까 라는 생각이 들어서 했던 고민에 대한 결론을 정리해본다.
데이터 유효성 체크도 객체의 역할이라고 생각했다.
예를 들어
[공백을 입력받으면 안됨]
[이름이 5자가 넘으면 안됨]
[마지막에 쉼표가 있으면 안됨]
[이름은 한명만 있으면 안됨]
이라는 유효성 체크를 해야 한다면,
[공백을 입력받으면 안됨]
[마지막에 쉼표가 있으면 안됨]
은 입력받는 InputView 에서 처리해야 한다. 왜냐면 이름을 저장할 때 생기는 예외라기 보다는
입력 그 자체에서 생기는 예외니까.
[이름이 5자가 넘으면 안됨]
이것은 Name 에서 처리해야 한다.
왜냐면 이름이라는 객체를 만들 때 생길 수 있는 예외로, 이름을 저장하는 객체의 책임이다.
[이름은 한명만 있으면 안됨]
이것은 날것의 String에서 Name의 리스트로 만드는 곳에서 처리해야한다.
왜냐면 이름의 갯수를 다루는 것은 리스트로 만들 때 처리하는 일이니까.
이런 식으로 각 객체의 책임에 따라 유효성검사하는 위치가 달라야 한다고 생각하고 구현하였다..
(Validation이라는 클래스를 만들어 예외처리를 하는 메소드를 한데 모아야 하나 라는 고민은 아직 결론이 나지 않았다...)
'객체지향' 카테고리의 다른 글
객체지향 생활체조 (0) | 2020.12.22 |
---|---|
의미있는 객체 이름 붙이기 (0) | 2020.12.09 |
좋은 객체란 무엇일까 (0) | 2020.12.06 |
객체 지향 도메인모델링 (0) | 2020.12.06 |
안티 패턴 (내 생각 포함) (0) | 2020.12.02 |