반응형
Notice
Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- mosquitto
- Kotlin
- firebase-storage
- Flavors
- TIZEN
- gradle
- socket-client
- git-push
- cloud-firestore
- AWS
- Galaxy Watch
- 워치
- Android
- socket-server
- 오즈뷰어
- socket.io
- Dva
- git
- google-login
- firebase-database
- mqtt
- ActivityResult-API
- Java8
- ozd
- NoSuchMethodError
- Firebase
- JNI
- BottomSheetDialog
- hung-up
- OZViewer
Archives
- Today
- Total
Hyeyeon blog
[Android] Kotlin - Higher-order Function 본문
반응형
# 함수형 프로그래밍
: 함수의 응용을 강조하는 프로그래밍 패러다임
# 함수형 인터페이스
: 추상 메서드 1개를 가진 인터페이스
# 람다식 (Lambda Expression)
- 람다 함수(Lambda function), 익명 함수(Anonymous function)를 지칭하는 용어
- 프로그래밍에서 식별 값 없이 실행할 수 있는 함수 표현 방법
- 함수형 인터페이스를 사용하여 람다식을 사용
- 객체 생성 없이 함수를 호출 하듯 바로 사용
# 함수 타입 (Function Type)
: 함수를 저장할 수 있는 변수 타입
# 함수 리터럴 (Function Literal)
- 함수를 나타내는 리터럴
- 보통 '고차 함수'를 위해 사용된다.
- (Int) -> Unit은 매개변수가 Int 타입이고 반환 타입이 Unit인 함수를 저장할 수 있는 타입이다. (이 부분이 '함수 리터럴' 이다.)
- line6의 number: Int는 함수 리터럴의 매개변수를 나타낸다. '->'를 경계로 매개변수와 함수 내용이 분리된다.
- 함수 리터럴은 return을 적지 않는다. 마지막 라인에 a+10을 적으면, a+10이 반환 값이 된다.
- * 만약 매개변수가 없는 함수 리터럴을 만들고 싶다면, 'number: Int ->' 부분 없이 함수의 내용만 나오면 된다.
val instantFunc: (Int) -> Unit
instantFunc = {number: Int ->
println("Hello $number")
}
instantFunc(33)
val instantFunc: ((Int) -> Unit)?
...
instantFunc?.invoke(33)
#고차 함수 (Higher-order Function)
- 인수를 함수로 받거나, 함수를 반환하는 함수
- 만약 고차 함수의 매개 변수가 여러 개이고, 함수 타입의 매개 변수가 맨 마지막에 온다면, 일반 인수들만 소괄호로 감사고, 함수 리터럴은 바깥으로 뺄 수 있다.
- ※ [초보자를 위한 코틀린 200제] 에서 발췌한 예제 코드 입니다.
- (1) ()->Unit 타입의 함수를 인수로 받는 고차 함수 decorate()를 선언
- (2) task 매개변수가 가리키는 함수를 호출하고 있다.
- (3) decorate 함수에 함수 리터럴 인수로 전달하고 있다.
fun decorate(task: () -> Unit){ println("===작업 시작===") task() println("===작업 종료===") } fun main(args: Array){ decorate({ val a = 10; val b = 5 println("$a + $b = ${a+b}") }) decorate({ println("some"); println("tasks") }) }
===작업 시작===
10 + 5 = 15
===작업 종료===
===작업 시작===
some
tasks
===작업 종료===
[참고 및 출처]
[Function Type vs Function literal vs Lambda expression vs Anonymous Function]
[초보자를 위한 코틀린 200제]
728x90
'개발 > Android' 카테고리의 다른 글
[Android] 둥근 모서리 레이아웃 적용하기 (0) | 2019.02.15 |
---|---|
[Android] Kotlin - SMS Retriever API (0) | 2019.02.15 |
[Android] Databinding - EditText의 OnTextChanged() 구현 (0) | 2019.01.30 |
[Android] Koin - Dependency Injection Library (0) | 2019.01.27 |
[Android] Kotlin- Encode Base64 & Encrypt SHA-512 (0) | 2019.01.24 |
Comments