본문 바로가기
TIL

고민의 늪 (22.09.02 TIL)

by winteringg 2022. 9. 2.
설계를 간단히 끝내고 최대한 빨리 구현에 돌입하라. 
설계가 제대로 그려지지 않는다면 고민하지 말고 실제로 코드를 작성해가면서 협력의 전체적인 밑그림을 그려보라. 
테스트-주도 설계로 코드를 구현하는 사람들이 하는 작업이 바로 이것이다. 
그들은 테스트 코드를 작성해 가면서 협력을 설계한다.


'객체지향의 사실과 오해' 라는 책에서 나온 구절이다. 이 내용이 책의 핵심적인 부분은 아니지만 이 말을 보고 조금 위로가 된 것 같아서 가져왔다. 실패가 무섭고 오류가 무서워서 시작하기 전 고민하는 시간이나 설계하는 시간이 길어질 때가 있다. 고민하는 시간과 설계하는 시간에 많이 투자했다고 해서 실패와 오류가 적게 발생하는 것이 아닌데도 말이다. 홀맨님도 말씀하셨지만 일단 동작하게 하는 것이 중요하다. 쓰레기 코드를 만들든 말든 일단 시작해보자. 작은 단위로 설계하고 부수는 과정을 반복하면 실마리가 보이겠지..? 설계를 정말 오래~완벽하게 하든 (완벽하게 할 수도 없지만) 설계한 그대로 똑같이 구현되는 코드는 없을 것이다. 지엽적인 것에 시간을 뺏기는 습관은 정말 지양해야겠다.

객체가 자신이 수신할 메시지를 결정하게 하지 말고 메시지가 협력에 필요한 객체를 선택하게 해야 한다.


이것도 같은 책에서 나온 구절인데 책에서 말하는 객체지향의 핵심은 '메시지'이다. 말이 조금 어렵지만 조금 더 쉽게 풀어서 쓰면, 메시지를 먼저 선택하고 그 후에 메시지를 수신하기에 적절한 객체를 선택해야 한다는 것을 의미한다. 근데 이건 내가 최근 3주동안 아샬님 강의를 따라 치면서 나도 모르게 하고 있던 것이였다. 강의에서도 객체 몇몇개를 제일 먼저 만드는 것이 아니라, 메시지를 선택한 후에 그게 빨간줄이 뜨면 (객체를 만들기 전이기 때문에 오류가 생기면) 그 때서야 어떤 객체가 이 메시지를 처리하기에 알맞은 객체인지를 선택하고나서 객체를 만드신다. 일단 그냥 코드 진행 순서를 따라했었는데 책을 읽고 나니 이해가 되면서 아샬님의 의도가 이것이였구나, 하는 느낌을 받았다. 항상 아샬님의 의도는 무엇일까? 생각하면서 코드를 따라치긴 하는데 나도 모르게 아무 생각이 없었나보다ㅎㅎ.. 의도가 무엇인지 항상 생각하는 습관을 가지자. 영상을 보고서도 무의식적으로 객체를 먼저 만들고 그에 따른 메서드를 만든 후 고민하는 습관이 있었는데 이 습관은 하루 빨리 고쳐야겠다. 메시지를 먼저 작성하고 그 후에 객체를 선택하자!!!

댓글