Community

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

← Go back
[TIL.3 함수]
#clean_code
2년 전
551


TIL (Today I Learned)

2022.02.22

오늘 읽은 범위

3장. 함수

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

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

  • 각 함수가 너무나도 명백했다. 각 함수가 이야기 하나를 표현했다. 각 함수가 너무도 멋지게 다음 무대를 준비했다. 바로 이것이 답이다![43]

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

  • 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다.[45]

  • 함수가 '한 가지'만 하는지 판단하는 방법이 하나 더 있다. 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다.[45]

  • 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다.[45]

  • 핵심은 짧으면서도 '한 가지'만 하는 함수다.[46]

  • 한 가지만 하는 작은 함수에 좋은 이름을 붙인다면 이런 원칙을 달성함에 있어 이미 절반은 성공했다. 함수가 작고 단순할수록 서술적인 이름을 고르기도 쉬워진다.[49]

  • 이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다.[50]

  • 함수에서 이상적인 인수 개수는 0개(무항)이다.[50]

  • 함수 선언부를 찾아보는 행위는 코드를 보다가 주춤하는 행위와 동급이다. 인지적으로 거슬린다는 뜻이므로 피해야 한다. [56]

  • 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다.[56]

  • 함수는 '한 가지' 작업만 해야 한다. 오류 처리도 '한 가지' 작업에 속한다. 그러므로 오류를 처리하는 함수는 오류만 처리해야 마땅하다.[59]

  • 그래도 중복은 문제다.[60]

  • 어쩌면 중복은 소프트웨어에서 모든 악의 근원이다.[60]

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

  • 함수는 그 언어에서 동사며, 클래스는 명사다.[62]

  • 대가(master)프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다.[62]

  • 하지만 진짜 목표는 시스템이라는 이야기를 풀어가는 데 있다는 사실을 명심하기 바란다. 여러분이 작성하는 함수는 분명하고 정확한 언어로 깔끔하게 같이 맞아떨어져야 이야기를 풀어가기가 쉬워진다는 사실을 기억하기 바란다.[62]

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

  • 클린코드를 읽을때마다 책을 덮고 싶은 생각이 매번 차오른다. 이 책에서 설명하는 나쁜코드는 틀림없는 내 코드다. 한번도 함수를 작성하기 전 깊게 생각해 본적이 없다는게 부끄럽고 반성하게 된다. 이번 챕터를 읽으면서 가장 감명 깊었던 부분은 코드 작성을 글짓기에 비유한 부분이였다. 나는 그저 초안만 사용했을뿐 단 한번도 다듬거나 수정하지 않았다. 내가 만든 함수는 '한 가지'만 하지 않을 뿐더러 의미없는 이름들로 가득했고 '여러 가지'를 하고 있지만 솔직히 그것도 잘 하는지 모르겠다. 반성해야겠다.

  • 앞으로 함수를 작성할 때 글로 먼저 표현해보는 방법도 좋을 것 같다. 무작정 코드부터 작성하는 것이 아니라. 내가 전체적으로 뭘 해야하고 그 단계는 어떻게 나뉘어지고 그 예외들은 어떻게 처리되며 전체적으로 원하는 결과는 무엇인지 파악하고 나면 그에 맞는 의미있는 이름을 찾기 쉬울 뿐더러 한 가지만 잘 하는 함수를 만들 수 있을 것 같다.

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

  • 출력 인수와 입력 인수

  • 시간적인 결합(temporal coupling) 순서 종속성(order dependency)