고차함수는 다른 함수를 인자로 받거나 함수를 결과값으루 출력하는 함수이다.

스칼라에서 함수들이 first-value 함수라서 가능한 것이다.

자바는 람다가 등장해서 가능해지긴 했지만 그래도 함수가 일급 객체가 아니라서 완전히 가능하진 않다.

다른 언어의 일급 객체와는 다르다.

일급 객체는 어떤 값들을 문자열이나 숫자 정수 실수 등과같이 직접적으로 다룰 수 있는 값이라는 의미.

고차 함수의 가장 흔한 일반적인 예는 map이라는 메소드이다.

val salaries = Seq(20000, 70000, 40000)
val doubleSalary = (x: Int) => x * 2
val newSalaries = salaries.map(doubleSalary) // List(40000, 140000, 80000)

(x: Int) : 파라미터 리스트이고

x * 2 : 반환 값이다

val salaries = Seq(20000, 70000, 40000)
val newSalaries = salaries.map(x => x * 2) // List(40000, 140000, 80000)

val salaries = Seq(20_000, 70_000, 40_000)
val newSalaries = salaries.map(_ * 2)

→ 축약해서 사용가능.

스칼라 컴파일러는 어떤 값이 올지를 추론할 수 있다. 따라서 위와 같이 축약해서 사용가능 한 것이다.

Coercing methods into functions