hyeals study
[코틀린] 고차 함수 본문
* 고차 함수(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"을 참고함.
'코틀린' 카테고리의 다른 글
map 함수 (0) | 2020.06.15 |
---|---|
[코틀린] 제네릭 타입 파라미터 (0) | 2020.02.28 |
[코틀린] 연산자 오버로딩 & 관례 - (2) 비교연산자 오버로딩 (0) | 2020.02.25 |
[코틀린] 연산자 오버로딩 & 관례 - (1) 산술연산자 오버로딩 (0) | 2020.02.25 |
[코틀린] 타입 시스템 (2) - 원시 타입 (0) | 2020.02.25 |