관리 메뉴

hyeals study

[코틀린] 고차 함수 본문

코틀린

[코틀린] 고차 함수

hyeals 2020. 2. 27. 16:26

* 고차 함수(high order function): 어떤 함수를 인자로 받거나 함수를 반환하는 함수

☞ 고차 함수는 람다 or 함수 참조를 인자로 넘길 수 있고, 람다 or 함수 참조를 반환하는 함수임.

 

ex) "list.filter { x > 0 }" 이 코드의 filter함수는 표준 라이브러리에 있는 함수인데 술어 함수를 인자로 받기 때문에 고차 함수임(filter외에도 map, with 등 코틀린 표준 라이브러리가 제공하는 여러 고차 함수가 존재)


[함수 타입]

 

※ 함수 타입 정의 방법

 

(Int, String) -> Unit

  • 위와 같이 정의하면 됨
  • (Int, String)은 함수의 파라미터 타입이며, Unit은 함수의 반환 타입임.
  • 함수 타입을 선언할 때는 반환 타입을 반드시 명시해야 하기 때문에 아무값도 반환하지 않는 함수를 정의하고 싶을 때는 Unit 타입을 써야함.

* 위 처럼 함수 타입을 지정하면 함수 타입에 있는 파라미터로부터 람다의 파라미터 타입을 유추할 수 있기 때문에 람다 식 안에서 파라미터의 타입을 적지 않아도 됨.

☞ 함수 타입을 지정했다면, "val sum = {x: Int, y: Int -> x + y}"람다식을 "{x, y -> x + y}"로 써도 됨.


[인자로 받은 함수 호출]

 

* 인자로 받은 함수 호출에 대해 알아보기 위해서 아래와 같이 간단한 고차 함수 예시를 들었음

 

간단한 고차 함수 정의 예시
출력 결과

  • 위 코드는 2, 3을 인자로 받은 연산을 수행한 후 결과를 출력하는 함수임
  • operation: (Int, Int) -> Int 부분: 함수 타입인 파라미터선언하는 부분임
  • val result = operation(2, 3) 부분: 함수 타입인 파라미터호출하는 부분임

* 함수 파라미터를 선언하는 부분인 "operation: (Int, Int) -> Int"를 좀 더 자세히 살펴보면

operation 파라미터 이름
(Int, Int) 파라미터로 받는 함수의 파라미터 타입
Int 파라미터로 받는 함수의 반환 타입

 

위와 같이 정리할 수 있음


[디폴트 값을 지정한 파라미터]

 

* 함수 타입으로 파라미터를 선언할 때도 디폴트 값을 정할 수 있음

 

☞ 파라미터를 선언할 때 "transform: (T) -> String = { it.toString() }" 처럼 함수 타입 파라미터를 선언함과 동시에 람다를 디폴트 값으로 지정하면 됨.


[널이 될 수 있는 파라미터]

 

* 또한 널이 될 수 있는 함수 타입을 사용할 수 있음 ( 널이 될 수 있는 함수 타입으로 함수를 받으면 그 함수를 직접 호출할 수는 없음)

 

☞ 널이 될 수 있는 파라미터를 선언하기 위해서는 파라미터를 선언할 때 "transform: ((T) -> String)?=null" 처럼 선언하면 됨. 

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

Comments