참고: Do it! 코틀린 프로그래밍 (P. 98~132)
1. 함수
코틀린은 함수형 프로그래밍이라고 했다. 그럼 함수는 무엇을 일컫는 단어인가?
값을 입력 받아 사전 정의된 기능을 수행하고, 결과값을 반환하는 모음을 말한다.
보통 코드를 여러 번 사용할 수 있어서 함수를 사용한다.
1-1. 함수의 구조
fun 함수명(변수명: 자료형, 변수명: 자료형 …): 반환값의 자료형{
코드
[return 반환값]
}

만약, 함수의 코드가 한 줄이라면, myfunction1 함수 처럼 단축할 수 있다.

1-2. 함수의 매개변수
(1) 매개변수의 기본값을 지정할 수 있다.

(2) 매개변수를 호출할 때, 이름과 함께 호출할 수 있다.

(3) 한 개의 인자만 정의해도 여러 개의 인자를 입력받을 수 있다.
Variable Argument(가변 인자)라고 하며, varargs 키워드를 사용한다.

** 만약, 가변인자와 일반 인자를 동시에 사용할 경우 가변인자를 마지막에 둔다.
2. 함수형 프로그래밍
코틀린은 함수형 프로그래밍과 객체지향 프로그래밍 둘 다 지원하는 다중 패러다임 언어다. 특히, 함수형 프로그래밍은 순수함수, 람다식, 고차함수를 사용해 효율적인 프로그래밍을 지향한다.
순수함수
A라는 함수가 있다고 가정해보자. 이 함수가 항상 같은 결과 값을 반환하고, 이 함수가 외부의 상태를 바꾸지 않을 때, 순수함수라고 한다.

람다식
이름이 없는 함수, 익명함수이다. 한번만 사용하고 재사용하지 않는 함수. 함수 코드 가독성이 높아지고, 함수형 프로그래밍에서 자주 사용하는 패턴이다.

고차함수
다른 함수를 인자로 사용하거나 함수를 결과값으로 반환하는 함수.
(1) 일반함수를 인자로 사용하는 고차함수

이외에도
(2) 반환값(return)에 일반함수를 넣은 고차함수,
(3) 람다식을 변수나 매개변수에 할당한 고차함수
가 있다.
3. 람다식과 고차함수 호출
3-1. 값에 의한 호출
“람다식 함수“를 호출한다.
함수가 다른 함수의 인자로 전달될 경우 람다식이 바로 값으로 처리되어 즉시 해당 함수의 결과값을 전달한다.


3-2. 이름에 의한 람다식 호출
“람다식 이름“을 호출한다.
인자로 전달 시 실행되지 않고 , 실제 호출 시 실행된다.


4. 람다식의 매개변수
4-1. 람다식에 매개변수가 없는 경우
매개변수가 없으므로 람다식에는 “->”가 사용되지 않는다.

4-2. 람다식에 매개변수가 1개인 경우
람다식에서 “->” 왼쪽에 변수를 작성해야 한다.
람다식 중 처리코드에서 ‘$변수명‘ 대신 ‘$it‘로 작성할 수 있다.

4-3. 람다식에 매개변수가 2개인 경우
매개변수가 1개인 경우와 비슷하다.
람다식에서 “->” 왼쪽에 변수를 작성해야 한다. 만일, 람다식의 일부 매개변수를 사용하지 않겠다면, 언더바(_)를 사용한다.
