It's just like pok    version4


fillXXX에 대한 변명

 | 

객체를 만들고 그 객체에 값을 채우는, 이른바 fillXXX 계열 함수를 꽤나 많이 만든다는 생각이 최근에 들었다. 물론 나도 이것이 그리 좋은 평가를 받지 못한다는 사실을 알고 있다.

일단, 무엇이 나쁠까?

저런 채움 함수가 있다는 것은 채우는 방식이 여러가지라는 것을 의미한다. 그리고 그렇게 채워지는 방식에 따라 다른 행동을 할 가능성이 많다. 외형적으로 동일한 객체가 어떤 채움함수를 거쳤는지에 따라 다른 행동을 야기하는 객체로 되는것은 외부에 많은 정보를 노출한다 - 채워야하는 방식이 다른데, 그것이 객체를 호출하는쪽에서 그 상황에 맞게 호출되어야 하고 채워진 정보가 어떻게 사용되는지 채워진 쪽에서 “White box”적으로 어느정도 알고 있어야 한다.

즉, 채워주고 채워주는것을 읽는 부분이 사실은 개념적으로 연결되어 있기 때문에 강한 결합관계이다.

왜 그렇게 되었을까?

객체가 Map처럼 일반 컨테이너에 가까워질 수록 저런 채움함수가 많았던거 같다. 그리고 그러한 일반 컨테이너 객체는 서로 다른 layer를 통과하기에 간편하므로 - 추후 “규격” 수정이 있더라도 한쪽의 소스 수정이 일어나지 않는, 일종의 OCP를 만족하는… - 꽤 많이 사용하고 있다.

나쁜 이유는 알겠는데, 꽤 큰 장점이 있어서 쉽게 제거할 수 없는것 - 이것이 채움 함수에 대한 변명이다.

PS. 좀더 고민하면 아마 응집도가 높은 인터페이스를 설계하자로 귀결 될것이나.. 정말 그렇게 되는걸까? 이런 부분이 Data-driven과 Model-driven의 개발 차이는 아닐까 조심스레 추측해본다.


프로그래밍