[클린 코드] 함수

nn·2022년 4월 27일
0

clean-code

목록 보기
4/9

오늘 TIL 요약

  • 작게 만들어라.

  • 소트트웨어를 짜는 행위는 글쓰기와 비슷하다.

  • 서술적인 이름을 사용하라.

  • 함수 인수

  • 명령과 조회를 분리하라.


3장. 함수

책에서 기억하고 싶은 내용

  • 한 가지만 해라(p.44)
    함수의 규칙은 작게, 더 작게다.
    그러므로 if, while등에 들어가는 블록도 한줄로 끝나야한다. --> 블록 안에서 함수를 호출해야한다. 중첩구조가 늘어날 수록 함수는 읽고 이해하기 힘들다.
    - 함수를 작게만드려면 함수는 한가지를 해야한다.
    즉, 추상화를 하는 이유가 이것인 것이다.

    한가지 작업만 하려면 모든 문장의 추상화 수준이 동일해야한다.
    함수내 추상화 수준이 섞이면 읽는 사람이 헷갈린다.

  • 서술적인 이름을 사용하지 말라(p.49)
    길고 서술적인 이름이 짧고 어려운 이름보다 좋다.
    또한 함수가 작고 단순해 질수록 이름고르기도 쉽다.

  • 함수 인수(p.50)
    함수의 인수는 많아질수록 좋지않다.
    인수가 많아질 수록 인수의 조합이 많아지고 개발자는 인수의 순서를 매번 기억하고 있어야한다. --> 함수를 볼때마다 주춤하게 된다.
    - 플래그 인수는 추하다. 함수가 한꺼번에 여러가지를 한다고 대놓고 공표하는 것이다.
    - 인수가 2,3개 필요하다면 객체를 생성해 독자적인 클래서 변수로 선언하자

Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);
  • 명령과 조회를 분리하라 (p.56)
    함수는 무엇인가를 수행하거나, 답하거나 둘 중 하나만 해야한다.
  • 내려가기 규칙(p.46, p.61)
    코드는 위에서 아래로 이야기처럼 읽혀야 좋다.

    TO 설정페이지와 해제 페이지를 포함하려면, 설정페이지를 포함하고 테스트 내용을 포함하고, 해제 페이지를 포함한다.

    TO 설정페이지를 포함하려면 슈트이면 슈트 설정페이지를 포함하고, 일반 설정 페이지를 포함한다.

    TO슈트 설정페이지를 포함하려면 ...

to키워드는 LOGO언어에서 사용하는 것으로 루비나 파이썬의 def와 동일하다.

  • 소프트웨어를 짜는 행위는 여느 글짓기와 같다.
    초안은 대게 서투르고 어수선하지만, 원하는 대로 읽힐 때까지 말을 다듬고 문단을 정리한다.
    함수도 처음에는 길고 복잡하고, 이름도 즉흥적이고 코드는 중복 될 수 있다. 이런 코드를 다듬고, 함수를 만들고, 중복을 제거하면서 규칙을 따르는 함수가 만들어지는 것이다.

소감

소프트웨어를 짜는 행위가 글짓기와 같다는 표현이 정말 인상적이었다.
나 역시 장황하고 굉장히 긴 함수를 쪼개면서 마음의 평화를 찾은 적이 많다.

그렇지만 역시 추상화는 아직도 문제다.
지금 생각해보면 정확히 어떤 기능을 해야하고 어떤 것을 만들고 있는지 정확히 정해지지 않은채 구현부터 해서 그런것같기도하다.
코딩을 하다가 앗 이것도 넣어볼까..? 저것도 넣어볼까 하다가 결국 추상화는 제로인 함수가 여럿 탄생했던 것 같다.

그러다보면 책에서 말한대로 문제인 중복되는 알고리즘, 비슷한 의미인 함수명과 같은 코드가 나타난다. 🥲

이제 문제와 해결법을 어렴풋이 배웠으니 실천하는 법만 남았다!


이해가 안되던 부분
switch문을 작게 만들기 위해 switch문을 추상 팩토리에 숨기고 인터페이스를 통해 호출한 후, 다형성을 이용해 switch문에 맞는 함수를 부르는 방법이 바로 switch문에서 함수를 각각 호출하는 방법에 비해 많이 클린한지 모르겠다.

다시 읽어봐야 할 부분같다.

profile
내가 될 거라고 했잖아

0개의 댓글