클린 코드 3장 함수

inhalin·2022년 2월 23일
0

노개북 클린 코드

목록 보기
4/12

노개북 2기 4~5일차

  • 3장 함수(pp.40~65)

요약 및 느낀 점

p.42
함수를 만드는 첫째 구칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다.

  • 중첩구조가 생길만큼 함수가 커지면 안된다.
  • 들여쓰기 수준은 2단을 넘어가면 안된다.

p.44
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.

  • 해당 함수 내에서 추상화 수준이 하나인 단계만 수행하도록 한다.
  • 해당 함수 내의 모든 문장의 추상화 수준은 동일해야 한다.
  • 내려가기 규칙: 위에서 아래로 내려가면서 읽히도록 한다.
  • 내려갈때마다 추상화 수준은 한 단계씩 낮아진다.
  • switch문은 기본적으로 N가지 작업을 처리한다. 이럴 때는 switch문을 추상 팩토리에 숨겨서 사용하고 다른 코드에 노출하지 않도록 한다.

p.49
길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.

  • 이상적인 함수 인수 개수는 0개다. 3개 이상은 피하고 4개 이상은 쓰지 않는다.
  • 플래그 인수는 이미 참/거짓 두 가지 경우의 작업을 수행한다는 것이기 때문에 지양한다.
  • 인수가 2-3개 필요한 경우 일부를 객체로 넘겨주는 것도 방법이다.
Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);
  • 인수 개수가 가변적인 함수의 경우 가변 인수 전부를 동등하게 취급하면 인수 하나로 취급할 수 있다.
  • 단항 함수는 함수와 인수가 동사-명사 쌍을 이루도록 한다.
  • 함수가 하려는 작업 외의 부수 효과를 일으키면 안된다.
  • 함수는 객체 상태를 변경하거나 객체 정보를 반환하거나 둘 중 하나만 해야 한다.
  • 오류 코드를 반환하지 말고 예외를 사용한다.
  • 같은 알고리즘을 사용하는 코드를 여러군데에서 반복해서 사용하면 안된다.

얼마 전에 리스트 순서를 변경해주는 함수를 만들어야 했다. 이미 다른 곳에서 사용중인 함수여서 복사해와서 필요한 부분은 수정을 해서 완성했다. 그 전에도 다른 곳이 같은 코드를 복붙해서 사용했었다. 이번에도 그때와 비슷한 상황이었고 결국 같은 작업을 하는 함수가 서로 다른 파일에 세 군데 존재하게 되었다.

언젠가 저것들을 하나로 통합해주어야 하는 건 알고 있다. 사실은 이번에 또 같은 작업을 하는 함수가 필요하다는 것을 알았을 때 하나에서 사용하도록 수정하고 싶었다. 근데 막상 손대려니 작업시간이 얼마나 걸릴지, 어디부터 어디까지 손을 봐야 할지 감을 잡기가 어려웠다. 내가 맡은 것을 일단 끝내고 싶은 마음도 컸다. 결국 중복 코드를 만든다는 걸 알면서도 당장 급한 불부터 끄자라는 안일한 마음으로 나쁜 코드를 쌓아버렸다. 내 손으로 만든 똥 언젠가는 반드시 내 손으로 치울거다.

p.61
소프트웨어를 짜는 행위는 여느 글짓기와 비숫하다. ... 초안은 대게 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다.
내가 함수를 짤 때도 마찬가지다. 처음에는 길고 복잡하다. 들여쓰기 단계도 많고 중복된 루프도 많다. 인수 목록도 아주 길다. 이름은 즉흥적이고 코드는 중복된다. 하지만 나는 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든다.
그런 다음 나는 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.
최종적으로는 이 장에서 설명한 규칙을 따르는 함수가 얻어진다. 처음부터 탁 짜내지 않는다. 그게 가능한 사람은 없으리라.

마지막으로 저자가 말하는 소프트웨어를 짜는 것에 대해 본인도 처음엔 서투르고 길고 중복된 코드를 짜지만, 그것을 조금씩 다듬어 가면서 규칙을 따르는 함수를 만든다고 쓴 부분을 옮겼다.

코드를 처음 만들때 길고 중복되고 지저분한 코드를 보면서 또 똥코드를 썼다며 자조하곤 했는데, 처음부터 완벽한 클린 코드를 짜내는 사람은 없다는 말에서 위로가 되었다. 일단은 동작하는 함수를 만들고 그 후에 불필요한 부분들은 걷어내고, 중복된 부분은 하나로 합쳐주고, 적절하게 이름을 붙여주는 과정을 거쳐서 깨끗한 코드를 만들 수 있으면 그것대로 괜찮은 것이다.

더 공부할 내용

  • switch문 추상 팩토리에 숨겨서 사용하는 부분
  • 단위 테스트 케이스 작성법

0개의 댓글