Community

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

← Go back
TIL 3장 함수
#clean_code
2년 전
676
1


3장 함수

TIL (Today I Learned)

2022-02-21

함수에 어떤 속성을 부여해야 처음 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있을까?

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

  • 작게 만들어라!

-if 문,else문, while문 등에 들어가는 블록은 한 줄이어야 한다는 의미다. 대개 거기서 함수를 호출한다. 그러면 바깥을 감싸는 함수가 작아질 뿐 아니라, 블록안에서 호출하는 함수 이름을 적절히 짓는다면, 코드를 이해하기도 쉬워진다.

-이 말은 중첩 구조가 생길만큼 함수가 커져서는 안 된다는 뜻이다. 그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다. 당연한 말이지만, 그래야 함수는 읽고 히해하기 쉬워진다.

  • 한 가지만 해라!

-함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 여기서 문제는 ‘한 가지’가 무엇인지 알기가 어렵다는 점이다.

-여기서 한 가지를 알아보는 방법은 지정된 함수 이름 아래에서 추상화 수준이 하나인 단꼐만 수행한다면 그 함수는 한 가지 작업만 한다. 어쨌거나 우리가 함수를 만드는 이유는 큰 개념을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위해서가 아니던가.

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

-함수가 확실히 ‘한 가지’ 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일 해야한다.

-한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다. 즉 위에서 아래로 프로그램을 읽으면 함수 추상화수준이 한 번에 한 단계씩 낮아진다.

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

-함수가 작고 단순할수록 서술적인 이름을 고르기도 쉬워진다. 이름이 길어도 괜찮다. 겁먹을 필요없다. 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.

-함수 이름을 정할 때는 여러 단어가 쉽게 읽히는 명명법을 사용한다. 그런 다음, 여러 단어를 사용해 함수 기능을 잘 표현하는 이름을 선택한다.

-이름을 정하느라 시간을 들여도 괜찮다. 이런저런 이름을 넣어 코드를 읽어보면 더 좋다.

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

-이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다. 예로 includeSetupAndTeardownPages, includeSetupPages, includeSuiteSetupPage, includeSetupPage 등이 좋은 예다.

  • 이름짓기

-함수의 의도나 인수의 순서와 의도를 제대로 표현하려면 좋은 함수 이름이 필수다. 단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야 한다. 예를 들어, write(name)은 누구나 곧바로 이해한다. ‘이름name’이 무엇이든 ‘쓴다write’는 뜻이다. 좀 더 나은 이름은 writeField(name)이다. 그러면 ‘이름name’이 ‘필드field’ 라는 사실이 분명히 드러난다.

-함수 이름에 키워드를 추가하는 형식도 있따. 즉, 함수 이름에 인수 이름을 넣는다. 예를 들어, assertEquals보다 assertExpectedEqualsActual(expected,actual)이 더 좋다. 그러면 인수 순서를 기억할 필요가 없어진다.

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

-함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 둘 다 하면 안 된다. 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다. 둘 다 하면 혼란을 초래한다.

  • 반복하지 마라

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

  • 함수를 어떻게 짜죠?

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

-내가 함수를 짤 때도 만찬가지다. 처음에는 길고 복잡하낟. 들여쓰기 단계도 많고 중복된 루프도 많다. 인수 목록도 아주 길다. 이름은 즉흥적이고 코드는 중복된다. 하지만 나는 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든다.

-그런 다음 나는 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.

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

  • 우선 지금은 그냥 읽고 다음에 또 읽을때는 java를 공부한 후 읽어 봐야겠다.

  • 이해안되는 부분은 천지지만 지금은 그냥 읽어야겠다.

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

  • 45p,46p에 나오는 추상화 수준 이라는 단어가 다오는데 무슨 말인지 모르겠다.

-https://sosimhan-dev.tistory.com/4

-https://lordofkangs.tistory.com/m/127

  • 함수 인수 부분은 전체적으로 이해가 안된다.(50p)

1 comment