# 함수(function)
## 목차
1. 함수란
2. 함수의 장점
3. 함수 사용법
- 함수 호출
- 함수 정의 및 구조
- 실행 흐름
4. 요약
## 1. 함수란
함수란 일련의 `코드 묶음`으로, **입력**을 받아 결과를 **반환**하는 특징을 갖는다.

## 2. 함수의 장점
함수를 사용하면, 많은 양의 코드를 단순화(`추상화`)할 수 있다.
예를들어 아래의 라면을 끓이는 코드를,
```
int main()
{
printf("라면을 산다\n");
printf("스프를 넣는다\n");
printf("물을 끓인다\n");
printf("면발을 넣는다\n");
}
```
단 한 줄로 실행할 수 있다.
```
int main()
{
cook_ramen();
}
```
## 3. 함수 사용법
함수를 사용하려면 두 가지 영역을 알아야 한다.
- 호출(실행부)
- 정의(구현부)
### 3.1 함수 호출
함수 호출(call)이란, 묶음 단위 코드를 실행하는 것이다.
호출 방법은, **함수명**(function name)을 적고 소괄호 사이에 **입력값**(arguments)을 넣음으로 수행된다.
```
// 함수명: plus_one
// 입력값: 10
int x = plus_one(10);
```
`plus_one(10)` 함수의 동작을 다음과 같이 정의하면,
- 입력값에 1을 더해 반환
함수의 실행 결과는 아래 코드와 같다.
```
// 반환값: 입력값 + 1
int x = 11;
```
### 3.2 함수 정의
함수를 호출하기 위해서는 먼저 정의(미리 만듬)되어야 한다.
```
int main()
{
int x = plus_one(5);
}
```
위 코드가 동작하기 위해서는 두 가지 조건이 필요하다.
1. 함수가 만들어져 있어야 하고,
2. 호출 지점보다 앞서 작성되야 한다.
함수를 정의하기에 앞서 먼저 구조를 알아야 한다. 구조는 아래와 같다.
```
// TYPE: 반환값(VALUE)의 타입
// NAME: 함수명
// PARAMETERS: 입력값을 저장하는 변수
// VALUES: 반환값으로, TYPE과 일치해야 함
TYPE NAME(PARAMETERS)
{
return VALUE;
}
```
함수의 정의로 다시 돌아와서, `plus_one(5)`가 동작하려면 함수 정의 부분이 추가되야 한다.
```
/* 함수 정의 */
int plus_one(int n)
{
return n + 1;
}
/* 프로그램의 시작점 */
int main()
{
int x = plus_one(5); // 함수 호출 -> 결과값 반환 -> x로 대입
}
```
## 4. 요약
1. 함수란 일련의 **코드 묶음**이다.
2. 함수를 사용하면, 많은 양의 **코드를 단순화** 할수 있다.
3. 함수는 호출과 정의 영역으로 나뉜다.
- 호출: 정의된 **함수를 수행**
- 정의: **입력값**을 **반환값**으로 만들기 위한 일련의 코드를 기술