더북(TheBook)
fun sumAndLog(a:Int, b:Int, log: (Int) -> Unit): Int =
    (a + b).also(log)

이 함수의 log 파라미터로 아무것도 하지 않는 순수 함수를 전달하면 sumAndLog가 순수 고차 함수인지 확인할 수 있다.

val tot = sumAndLog(5, 6){}

이 경우 sumAndLog는 여전히 참조 투명성을 유지한다.

순수하지 않은 계산의 예로 println 함수를 들 수 있다. 이 함수의 반환 타입은 Unit이지만 부수 효과로 콘솔에 문자열을 출력한다. 이제 sumAndLogprintln을 전달하면 부수 효과가 발생하면서 결과를 표준 출력에 출력한다.

val tot = sumAndLog(5, 6, ::println)

그러나 sumAndLog 자체는 여전히 순수한 함수로 남아 있다. 이 차이점을 이해하는 것이 중요하다.

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