더북(TheBook)

3.2.6 함수 값 사용하기

앞에서 함수를 데이터처럼 다룰 수 있지만 fun으로 정의된 함수는 그렇지 않다고 말했다. 코틀린은 함수를 데이터처럼 다룰 수 있게 한다. 코틀린에는 함수 타입이 있으며, 일반적인 데이터를 그 데이터의 타입과 일치하는 참조에 대입할 수 있는 것처럼 함수를 그 함수와 일치하는 타입의 참조에 대입할 수 있다. 다음 함수를 생각해 보자.

fun double(x: Int): Int = x * 2

이 함수를 다음과 같이 정의할 수 있다.

val double: (Int) -> Int = { x -> x * 2 }

여기서 double 함수의 타입은 (Int) -> Int다. 화살표의 왼쪽에는 파라미터 타입을 괄호로 둘러싸서 표시한다. 반환 타입은 화살표 오른쪽에 위치한다. 함수 정의는 등호 뒤에 온다. 이때 함수 정의를 중괄호({})로 둘러싼 람다 식 형태를 사용한다.

이 예제에서 람다는 파라미터에 해당하는 이름(x)과 화살표, 함수가 반환할 값을 계산하기 위한 식으로 구성된다. 여기서는 식이 아주 단순해서 한 줄에 모든 정의를 쓸 수 있었다. 하지만 식이 복잡해지면 여러 줄에 걸쳐 써야 할 수도 있다. 그럴 때에는 다음 코드처럼 맨 마지막 줄의 값이 전체 결과가 된다.

val doubleThenIncrement: (Int) -> Int = { x ->
    val double = x * 2
    double + 1
}

이때 맨 마지막 줄에 return을 붙이면 안 된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.