[Kotlin] RxKotlin Study 02

Reactive Prgramming in Kotlin

Posted by JungHoon-Park on February 3, 2021

RxKotlin 공부하기


함수형 프로그래밍의 기초

람다 표현식

람다 또는 람다식은 이름이 없는 익명 함수를 의미한다. 람다식은 함수라고 말할 수 있지만 모든 함수가 람다식인 것은 아니다. 모든 프로그래밍 언어가 람다식을 지원하는 것도 아니다.
코틀린은 람다 표현을 잘 지원한다. 밑의 예제를 보면서 작동방식을 살펴보자.

[ 예제 ]

1
2
3
4
5
6
7
fun main() {
    val sum = { x: Int, y: Int -> x + y} //1
    println("Sum ${sum(12,14)}") //2
    val anonymousMult = { x: Int -> (Random().nextInt(15)+1) * x}
    // 3
    println("Random output ${anonymousMult(2)}") //4
}
  • 1 -> 두 개의 숫자를 더하고 결과의 합을 반환하는 람다식을 선언한다.
  • 2 -> 그 함수를 호출하고 결과를 출력한다.
  • 3 -> 15까지 제한된 난수를 전달된 x와 곱한 후 결과를 반환하는 또 다른 람다를 선언
  • 4 -> 결과 출력

순수 함수

함수의 리턴값이 인수/매개 변수에 전적으로 의존하면 이 함수를 순수 함수라고 한다. 순수 함수는 람다 또는 명명된 함수일 수도 있다. 이전 예제에서 첫 번째 람다식은 순수 함수 였지만 두번째의 경우 반환값은 동일한 값이 전달된 경우에도 달라질 수 있다. 다음 예제를 보자

[ 예제 ]

1
2
3
4
5
6
7
8
9
fun square(n: Int): Int { // 1
    return n*n
}

fun main() {
    println("named pure func square = ${square(3)}")
    val qube = {n: Int -> n*n*n} // 2
    println("lambda pure func qube = ${qube(3)}")
}
  • 1, 2 -> 모두 순수 함수로서 하나는 이름이 있는 함수, 나머지는 람다이다. 값 3 을 어떤 함수에 n 번 전달하면 매번 동일한 값이 반환된다. 즉 순수 함수에는 Side Effect 가 없다.

고차 함수

함수를 인자로 받아들이거나 반환하는 함수를 고차 함수라고 부른다. 다음 예제를 보자

[ 예제 ]

1
2
3
4
5
6
7
8
9
10
11
12
fun highOrderFunc(a: Int, validityCheckFunc:(a: Int)->Boolean) {//1
    if(validityCheckFunc(a)) {//2
        println("a $a is Valid")
    } else {
        println("a $a is Invalid")
    }
}

fun main() {
    highOrderFunc(12, {a:Int -> a.isEven()})//3
    highOrderFunc(19, {a:Int -> a.isEven()})
}