Featured image of post 클린코드: 3. 함수 잘 만드는 법

클린코드: 3. 함수 잘 만드는 법

어떤 프로그램이든 가장 기본적인 단위는 함수다

  • 어떻게 해야 읽기 쉽고 이해하기 쉬운 함수를 만들 수 있을까
  • 의도를 분명히 표현하는 함수를 어떻게 구현할수 있을까
  • 함수에 어떤 속성을 부여해야 처음 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있을까

작게 만들어라

함수를 만드는 첫번째 규칙은 ‘작게!’, 두번째 규칙은 ‘더 작게!’ 다.

이 규칙은 증명하긴 어렵지만 작가의 경험으로 작은 함수가 좋다고 확신한다.

함수가 작을수록 한가지 일만 처리하게 만들기 용이하고 명백해진다.

블록과 들여쓰기

조건문을 통해 처리될 블록은 한줄로 표현해야한다. 즉 코드를 함수로 만들어야 한다.

블록에 들어가게 되는 함수 이름을 적절하게 사용한다면 코드를 이해하기 쉬워진다.

이 말은 중첩 구조가 생길만큼 함수가 커져서는 안 된다는 뜻으로 함수의 들여쓰기 깊이는 2단을 넘지 않게 만드는 것이 좋다.

한가지만 해라

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

추상화 수준이 하나인 단위로 함수를 만들면 한가지 일을 하는 함수를 만들 수 있다.

함수를 만드는 이유는 큰 개념(기능)을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위해서다. 의미를 유지하면서 더 쪼갤 수 없는 수준까지 줄여야한다.

단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다.

함수 내 섹션

섹션이 여러개 만들어진다면 함수가 여러개의 일을 한다는 뜻이다. 한가지 일 만 하는 함수는 자연스럽게 섹션으로 나누기 어렵다.

함수 내 추상화 수준은 하나로

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

한 함수 내에 추상화 수준을 섞으면 특정 표현이 근본 개념인지 세부사항인지 구분하기 어려워, 코드를 읽는 사람이 헷갈린다.

또한 근본 개념과 세부사항을 뒤섞기 시작하면, 깨진 유리창처럼 사람들이 함수에 세부사항을 점점 더 추가한다.

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

코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다.

즉 위에서 아래로 읽히려면 함수 추상화 수준이 한번에 한 단계씩 낮아진다.

💡 내려간다는건 단순히 위에서 아래로 읽힌다는 의미보다, 깊이가 깊어질수록 조금 더 낮은 수준으로 표현되야 한다는 뜻같다.

추상화 수준이 하나인 함수를 구현하는것은 어렵다. 핵심은 짧으면서도 한가지 일만 수행하는 함수이다. 한 단계씩 깊어지는 코드를 구현하면 추상화 수준을 일관되게 유지하기 쉬워진다.

Switch 문

Switch문은 본질적으로 switch 문은 N 가지를 처리하기 때문에 작게, 한 가지 작업만 수행하게 만들기 어렵다.

완전히 사용하지 않을 방법은 없기 때문에 다형성을 사용하여 저차원 클래스에 숨기고 반복하지 않게 만들어야 한다.