최근 교육 준비를 하면서 클린 코드(clean code)책을 다시 읽었다. 이 책 내용 중 함수 구현과 관련해 공유하고 싶은 내용이 있어 글을 쓴다.
소프트웨어를 구현하는 행위는 여느 글짓기와 비슷하다. 논문이나 기사를 쓸 때는 먼저 생각을 기록한 후 읽기 좋게 다듬는다. 초안은 대개 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다.
필자는 함수를 구현할 때도 마찬가지다. 처음에는 길고 복잡하다. 들여쓰기 단계도 많고, 중복된 루프도 많다. 인수 목록도 아주 길다. 이름은 즉흥적이고 코드는 중복된다. 하지만 필자는 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든다.
그런 다음 필자는 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메소드를 줄이고, 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.
결국에는 앞에서 다룬 규칙을 따르는 함수를 얻을 수 있다. 처음부터 딱 짜내지 않는다. 그게 가능한 사람은 없으리라.
이 글의 핵심은 단위 테스트와 리팩토링이다. 처음부터 완벽한 코드를 구현하는 것이 쉽지 않기 때문에 시작은 구현에 집중하고, 다음 단계로 리팩토링을 통해 개선해 나가는 접근 방법이다. 이와 같이 구현과 리팩토링을 분리하는 것은 관심사를 분리하는 것처럼 한 번에 한 가지에만 집중할 수 있기 때문에 좋은 접근 방법이라 생각한다.
구현 과정에 집중해 동작하는 코드를 만든 후 작업을 끝내지 말고 반드시 리팩토링을 통해 개선한 후 작업을 마무리하는 습관을 들일 것을 추천한다.
0개의 의견 from FB
0개의 의견 from SLiPP
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.