노개북 2기 4~5일차
- 3장 함수(pp.40~65)
p.42
함수를 만드는 첫째 구칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다.
p.44
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
p.49
길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.
Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);
얼마 전에 리스트 순서를 변경해주는 함수를 만들어야 했다. 이미 다른 곳에서 사용중인 함수여서 복사해와서 필요한 부분은 수정을 해서 완성했다. 그 전에도 다른 곳이 같은 코드를 복붙해서 사용했었다. 이번에도 그때와 비슷한 상황이었고 결국 같은 작업을 하는 함수가 서로 다른 파일에 세 군데 존재하게 되었다.
언젠가 저것들을 하나로 통합해주어야 하는 건 알고 있다. 사실은 이번에 또 같은 작업을 하는 함수가 필요하다는 것을 알았을 때 하나에서 사용하도록 수정하고 싶었다. 근데 막상 손대려니 작업시간이 얼마나 걸릴지, 어디부터 어디까지 손을 봐야 할지 감을 잡기가 어려웠다. 내가 맡은 것을 일단 끝내고 싶은 마음도 컸다. 결국 중복 코드를 만든다는 걸 알면서도 당장 급한 불부터 끄자라는 안일한 마음으로 나쁜 코드를 쌓아버렸다. 내 손으로 만든 똥 언젠가는 반드시 내 손으로 치울거다.
p.61
소프트웨어를 짜는 행위는 여느 글짓기와 비숫하다. ... 초안은 대게 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다.
내가 함수를 짤 때도 마찬가지다. 처음에는 길고 복잡하다. 들여쓰기 단계도 많고 중복된 루프도 많다. 인수 목록도 아주 길다. 이름은 즉흥적이고 코드는 중복된다. 하지만 나는 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든다.
그런 다음 나는 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.
최종적으로는 이 장에서 설명한 규칙을 따르는 함수가 얻어진다. 처음부터 탁 짜내지 않는다. 그게 가능한 사람은 없으리라.
마지막으로 저자가 말하는 소프트웨어를 짜는 것에 대해 본인도 처음엔 서투르고 길고 중복된 코드를 짜지만, 그것을 조금씩 다듬어 가면서 규칙을 따르는 함수를 만든다고 쓴 부분을 옮겼다.
코드를 처음 만들때 길고 중복되고 지저분한 코드를 보면서 또 똥코드를 썼다며 자조하곤 했는데, 처음부터 완벽한 클린 코드를 짜내는 사람은 없다는 말에서 위로가 되었다. 일단은 동작하는 함수를 만들고 그 후에 불필요한 부분들은 걷어내고, 중복된 부분은 하나로 합쳐주고, 적절하게 이름을 붙여주는 과정을 거쳐서 깨끗한 코드를 만들 수 있으면 그것대로 괜찮은 것이다.