-
[Kotlin] 고차 함수Kotiln 2020. 6. 30. 14:53
고차 함수 정의
고차 함수
는 다른 함수를 인자로 받거나 함수를 반환하는 함수이다.표준 라이브러리 함수인
filter
는 술어 함수를 인자로 받으므로 고차 함수이다.함수 타입
함수 타입을 정의하려면 함수 파라미터의 타입을 괄호 안에 넣고 그 뒤에 화살표
->
를 추가한 다음, 함수의 반환 타입을 지정한다.(Int, String) -> Unit
함수 타입에서도 반환 타입을
nullable
로 지정할 수 있다.val canReturnNull: (Int) -> Int? = {null}
함수 타입 전체가
null
이 되게 선언할 수도 있다.val funOrNull: ((Int, Int) -> Int)? = null
함수 타입에서 파라미터 이름을 지정할 수도 있다.
fun performRequest(url: String, callback: (code:Int, content: String) -> Unit){ callback(1, "abc"); }; performRequest("ab"){code, content -> println(code); println(content); } >>> 1 >>> abc
함수 타입의 람다를 정의할 때 파라미터 이름이 꼭 함수 타입 선언의 파라미터 이름과 일치하지 않아도 된다.
performRequest("ab"){code, page -> println(code); println(page); }
인자로 받은 함수 호출
인자로 받은 함수를 호출하는 구문은 일반 함수를 호출하는 구문과 같다.
fun twoAndThree(operation: (Int, Int) -> Int){ val result = operation(2, 3) println("result: $result") } >>> twoAndThree {a, b -> a + b} >>> result: 5
자바에서 코틀린 함수 타입 사용
컴파일된 코드 안에서 함수 타입은 일반 인터페이스로 바뀐다.
각 인터페이스에 포함된
invoke
메소드를 호출하면 함수를 실행할 수 있다.invoke
메소드에는 람다의 본문이 들어간다.함수 타입을 사용하는 코틀린 함수를 자바에서도 쉽게 호출할 수 있다.
// 코틀린 선언 fun foo(bar: (Int) -> Int) { println(f(32)) } // 자바 foo(number -> number + 1); >> 43 // 자바 8 이전 foo(new Function1<Integer, Integer>(){ @Override public Integer invoke(Integer bar) { System.out.println(bar); return bar + 1; } }
디폴트 값을 지정한 함수 타입 파라미터
fun foo(bar: (f) -> String = {it.toString()}) {...}
nullable 함수 파라미터
fun foo(bar: ((f) -> String)? = null) {...}
함수를 반환하는 함수
fun foo() : (String) -> String { return {str -> "${str}foo"}; } val func = foo() println(func("abc")); >>> abcfoo
반응형'Kotiln' 카테고리의 다른 글
코틀린과 삼항 연산자 (1) 2021.03.19 kotlin gradle 프로젝트에 ktlint 적용하기 (0) 2020.11.07 [Kotlin] 엔티티로 테이블 이름 가져오기 (0) 2020.04.13 자바 Class 로 KClass 생성하기 (0) 2019.12.19 코틀린 - 함수의 정의와 호출 (0) 2019.07.24