[kotlin] 코틀린에서 람다식과 고차 함수를 사용하여 캡처링(capturing)을 통한 상태 보존하기

코틀린은 함수를 일급 시민으로 취급하며, 람다식과 고차 함수 덕분에 캡쳐링(capturing)을 통해 변수나 객체의 상태를 보존할 수 있습니다. 이를 통해 코드의 가독성을 높이고 반복 작업을 줄일 수 있습니다.

람다식(Lambda Expression)이란 무엇인가요?

람다식은 이름 없는 함수로, 수식(expression)으로 표현되는 함수를 말합니다. 코틀린에서는 중괄호로 감싸여진 인자 리스트와 화살표로 이루어진 표현식입니다.

예를 들어, 아래와 같이 filter() 함수 내에서 람다식을 사용하여 조건에 맞는 요소를 필터링할 수 있습니다.

val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 }

위 예시에서 it은 리스트 내의 각 요소를 가리키며, 람다식은 it % 2 == 0 조건을 만족시키는 요소만 필터링합니다.

캡쳐링(Capturing): 고차 함수와 외부 변수

고차 함수는 다른 함수를 파라미터로 받거나 함수를 반환하는 함수를 말합니다. 이를 통해 외부 변수를 캡쳐하여 상태를 유지할 수 있습니다.

아래 예시는 runSimulation() 함수 내에서 고차 함수를 사용하여 외부 변수 numSimulations의 상태를 보존하는 방법을 보여줍니다.

fun main() {
    var numSimulations = 0

    runSimulation {
        // 시뮬레이션 로직
        numSimulations++
        println("Simulating...")
    }
}

fun runSimulation(simulation: () -> Unit) {
    simulation() // 시뮬레이션 실행
}

위 예시에서 runSimulation() 함수는 외부 변수 numSimulations를 캡쳐하여 상태를 변경하고 있습니다. 이를 통해 람다식이나 고차 함수를 사용하여 코드 작성 시 유연하고 간결하게 상태를 보존할 수 있습니다.

결론

코틀린의 람다식과 고차 함수를 사용하면 캡쳐링을 통해 상태를 보존할 수 있습니다. 이를 통해 코드의 가독성을 향상시키고 반복 작업을 줄일 수 있습니다.

코틀린의 함수형 프로그래밍 지원을 통해 코드 작성을 더욱 간편하고 유연하게 만들 수 있습니다.

참고: Kotlin Docs - Lambdas and higher-order functions