Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back

클린코드 Day4: 3장 함수

#clean_code
1년 전
283

오늘 읽은 범위

2~3장

책에서 기억하고 싶은 내용을 써보세요.

어떤 프로그램이든 가장 기본적인 단위가 ‘함수’다. 40

작게 만들어라!

  • 아주아주아주 작게 만들어야함. 5줄 이내로 43

  • if/else문, while문 등에 들어가는 블록은 한 줄이어야 한다.

  • 중첩구조가 생길만큼 함수가 커져서는 안 된다.

한 가지만 해라!

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

  • 추상화 수준이 1개만 한 가지만 하는 것

  • 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈

함수당 추상화 수준은 하나로!

  • 높은 추상화 수준은 높은 추상화 수준끼리, 낮은 추상화 수준은 낮은 추상화 수준끼리

위에서 아래로 코드 읽기: 내려가기 규칙

  • 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번 에 한 단계씩 낮아진다.

switch 문

  • 웬만하면 쓰지말자

서술적인 이름을 사용하라!

“코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다” 49

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

길고 서술적인 이름이 길고 서술적인 주석보다 좋다.

서술적인 이름을 사용하면 개발자 머릿속에서도 설계가 뚜렷해지므로 코드를 개선하기 쉬워진다.

모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다. ⇒ 문체가 비슷하면 이야기를 순차적으로 풀어가기도 쉬워진다.

함수 인수

함수에서 이상적인 인수 개수는 0개다. 다음은 1개고, 다음은 2개다. 3개는 가능한 피하는 편이 좋다. 4개 이상은 특별한 이유가 필요하다. 특별한 이유가 있어도 사용하면 안 된다. 50

인수는 개념을 이해하기 어렵게 만든다.

플래그 인수는 추하다! 이미 2가지 일을 해야함 true인 경우, false 경우

함수의 의도나 인수의 순서와 의도를 제대로 표현하려면 좋은 함수 이름이 필수다.

단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야 한다. ex) writeField(name) 54

부수 효과를 일으키지 마라!

부수효과를 일으킬거면 부수효과도 함수명에 넣어서 함수의 사용을 명확하게 하라

명령과 조회를 분리하라!

함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다. 56

오류 코드보다 예외를 사용하라!

try/catch 블록은 원래 추하다. 코드 구조에 혼란을 일으키며, 정상 동작과 오류 처리 동작을 뒤섞는다. 그러므로 try/catch 블록을 별로 함수로 뽑아내는 편이 좋다. 58

오류처리도 한 가지 작업이다. 그러므로 오류를 처리하는 함수는 오류만 처리해야 마땅하다. 59

반복하지 마라!

중복은 문제다. 코드 길이가 늘어날 뿐 아니라 알고리즘이 변하면 네 곳이나 손봐야 하니까. 게다가 어느 한 곳이라도 빠뜨리는 바람에 오류가 발생할 확률도 네 배나 높다. 60

구조적 프로그래밍

함수를 어떻게 짜죠?

소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 논문이나 기사를 작성할 때는 먼저 생각을 기록한 후 읽기 좋게 다듬는다. 초안은 대개 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다.

함수를 짤 때도 마찬가지다. 처음에는 길고 복잡하다. 들여쓰기 단계도 많고 중복된 루프도 많다. 인수 목록도 아주 길다. 이름이 즉흥적이고 코드는 중복된다. … 그런 다음 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다.


오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

함수를 읽으면서 많이 부끄러웠다. 지금까지 수년동안 여기서 제안하는 내용과 정말 동떨어진 함수를 작성해온 것 같다.

중복을 제거하고, 함수를 분리하고 깔끔하게 하는 것들은 해야하지만 귀찮아서 안했던 것들이다.

아예 인자가 없는게 제일 좋으며, 많아도 1개, 특별한 경우에 2개만 넣어야된다거나 함수는 단일 기능만 해야한다는 것. 플래그는 안쓰는게 좋다는 것 등은 처음 알게되었다. 특히 2~5줄 이내로 함수를 작게 유지해야한다는 부분에서는 몇백 줄이 넘어가는 내 함수를 보면서 많이 부끄러웠다.

최근에 작성한 코드부터 아주작게 조금씩 하지만 매일 체크인한 뒤에 체크아웃할때는 조금 더 깔끔한 코드를 만들자!

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

tdd는 항상 진행하는게 좋은가? react 같은 클라이언트 프레임워크에서는 어느정도로 테스트 코드를 작성해야 할까?