코틀린에 함수가 두 종류나 있는 이유가 궁금한 독자도 있을 것이다. 함수가 값이라면 굳이 fun을 사용해 함수를 정의해야 하는 이유가 무엇일까?
3.2.4절을 시작하면서 언급했던 것처럼 fun으로 정의한 함수는 실제로는 함수가 아니다. 이를 메서드, 하위 프로그램, 프러시저 등으로 부를 수 있다. fun으로 정의한 함수로 (항상 인자에 의해서만 값이 정해지고 외부에서 관찰할 수 있는 효과가 없는) 순수 함수를 표현할 수 있지만, 이를 데이터처럼 취급할 수는 없다.
왜 fun 함수를 사용해야 할까? fun 함수가 더 효율적이기 때문이다. 이를 최적화로 볼 수 있다. 인자를 넘기고 그 인자에 따른 반환 값을 얻는 일만 하는 경우에는 fun으로 정의한 함수를 사용하라. 꼭 fun으로 정의한 함수를 사용할 필요는 없지만 사용하는 편이 더 낫다.
한편 함수를 데이터처럼 취급해야 하거나(예를 들어 곧 보게 되겠지만 다른 함수에 함수를 인자로 넘겨야 한다면) 함수에서 함수를 돌려줘야 하는 경우이거나 변수, 맵 그 밖의 데이터 구조에 함수를 저장해야 하는 경우라면 함수 타입의 식을 사용하라.
한 유형의 함수를 다른 유형의 함수로 변환하는 방법이 궁금할 것이다. 변환은 아주 간단하다. 다만 실행 시점에 fun 함수를 만들 수는 없기 때문에 fun 함수를 함수식 유형의 값으로 변환할 수만 있다.