# 함수형 설계

### 설계는 엉켜있는 코드를 푸는 것

> 함수를 사용해서 관심사를 자연스럽게 분리

* **함수는 인자를 넘기는 값과 그 값을 사용하는 방법을 분리한다.**
* 크고 복잡한 함수가 더 잘 만들어진것 같다면 다시 합친다.
* 분리된 것은 언제든 다시 쉽게 조합할 수 있다. → 잘 분리하는 방법이 더 어렵다.
* 암묵적 입출력은 명시적인 인자값, 출력값으로 바꿔 없애주자.
* **엉켜있는 것을 풀어 함수가 한가지 일만 수행하도록 만들면, 개념을 중심적으로 보다 쉽게 구성할 수 있다.**

{% hint style="info" %}
함수에 특별한 문제가 없어도 꺼낼것이 있다면 분리하자. 그렇게 하면 더 좋은 설계가 된다.
{% endhint %}

### 유지보수성

* 작은 함수는 이해하기 쉽고 유지보수하기 쉽다.
* 코드가 작기 때문에 올바른지 아닌지 명확하게 확인 가능

### 테스트성

* 단일 책임 원칙으로 한가지 일만 하기 때문에 테스트하기 쉽다.

### 재사용성

* 함수는 작으면 작을수록 재사용하기 쉽다.
* 하는일이 명확하고 적기 때문에 사용할 때 가정을 많이 하지 않아도 된다.
