프로그래밍/Clean Code

Clean Code - 깨끗한 함수

한디벨 2018. 10. 2. 16:20

깨끗한 함수란?

 

함수 : 프로그램의 기본적인 단위

함수를 잘 만드는 방법

1.     작게 만들어라 : 함수를 만드는 규칙은 첫번째 작게!’, 두번째 더 작게!’ 이다. 중첩 구조가 생길만큼 함수가 커져서는 안된다. 블록 들여쓰기는 1단이나 2단이 적당하다.

2.     한가지만 해라 : “함수는 한 가지를 해야한다. 그 한 가지를 잘해야 한다. 그 한 가지만을 해야한다.”

3.     함수 당 추상화 수준은 하나로 : 한 함수 내에 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈린다. Ex) getHtml() .append(“\n”) 은 다른 추상화 수준이므로 함수 내에 저 두개의 코드가 있으면 이 규칙을 위반한 함수이다.

4.     서술적인 이름을 사용하라 : 서술적인 이름을 사용하면 개발자 머릿속에서 설계가 뚜렷해지므로 코드를 작성하기 쉬워진다. 서술적인 함수 이름을 사용하면 함수의 의도를 쉽게 설명할 수 있다. 함수 이름을 읽고서 그 함수가 짐작했던 기능을 수행한다면 깨끗한 함수라 할 수 있다.

5.     함수 인수의 개수 : 함수에서 이상적인 인수 개수는 0개이다. 그리고 3개 이상의 인수는 가능한 피하는 편이 좋다. 인수가 많을수록 함수의 코드를 이해하기 어려워진다. 또한 인수는 테스트를 복잡해지게 만든다. 갖가지 인수 조합으로 테스트 케이스를 작성하기 때문이다.

6.     부수 효과를 일으키지 마라 : 함수에서 한가지만 하겠다고 약속하고서 남몰래 다른 기능도 수행하면 안된다.

7.     명령과 조회를 분리하라 : 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 즉 명령과 조회 중 하나만 해야한다. 마찬가지로 객체 상태를 변경하거나 객체 정보를 반환하거나 둘 중 하나만 해야한다. Ex) if(set(“usersname”, “unclebob”)) 보다 if(attributeExists(“username”)){ setAttribute(“username”, “unclebob”); } 으로 나누어 username 인 속성이 있는지 체크해서 있으면(조회), username 속성값을 unclebob 으로 셋팅(명령) 하는 형식으로 작성해야 한다.

8.     오류코드보다 예외를 사용하라 : 명령 함수를 호출하여 오류 코드를 반환하는 방식은 명령/조회 분리 규칙을 위반한다. If(deletePage(page) == ERROR) 과 같이 명령을 표현식으로 사용하기 때문이다. 따라서 오류코드 대신 예외를 사용하면 코드가 깔끔해진다.

9.     반복하지 마라 : 중복된 코드는 알고리즘이 변경되면 중복 된 모든 코드를 고쳐야 되고 소스 코드도 길어지게 된다. 중복을 없애야 오류가 발생할 확률을 줄이고 유지보수에도 매우 도움이 된다.

10.  함수를 어떻게 짜나요? : 소프트웨어를 짜는 행위는 글짓기와 비슷하다. 글짓기도 초안은 서투르고 어색하며 어수선하다. 이내 문장을 다듬고 오타를 고치고 문단을 정리하여 글짓기를 한다. 소프트웨어도 마찬가지이다. 처음 작성한 함수는 중복도 있고 두가지의 일도 하며 함수 이름도 서술적이지 않을 수 있다. 이런 함수를 코드를 다듬고, 이름을 바꾸고, 중복을 제거하고, 메소드를 줄이고 순서를 바꾸며 다듬는다. 이 과정에서 가장 중요한 것은 다듬는 과정속에서도 단위 테스트는 항상 통과해야 한다. 처음부터 깨끗한 함수를 짜낼 수는 없다. 다듬어 가면서 깨끗한 함수를 완성하는 것이다.

 

결론은 위의 규칙을 따른다면 길이가 짧고, 이름이 좋고, 체계가 잡힌 함수를 만들 수 있을 것이다. 하지만 진짜 목표는 시스템을 구현하는 것이고, 그 시스템을 위한 함수가 분명하고 정확한 언어로 깔끔하게 같이 맞아떨어져야 시스템을 구현하기가 쉬워진다는 사실이다.

 

'프로그래밍 > Clean Code' 카테고리의 다른 글

Clean Code - 객체와 자료구조  (0) 2018.11.05
Clean Code - 주석  (0) 2018.10.02