클로저 안의 람다

    자바와 마찬가지로 코틀린에서도 람다가 자신을 둘러싸는 영역의 변수를 가두어 닫을 수 있다.

    val multiplier = 3
    
    fun multiplyAll(list: List<Int>): List<Int> = list.map { it * multiplier }

    하지만 일반적으로 클로저를 함수 인자로 바꿀 수 있다는 사실을 알고 있어야 한다. 함수 인자로 바꾸고 나면 더 안전해진다. 다음 예제를 보자.

    fun multiplyAll(list: List<Int>, multiplier: int): List<Int> = list.map { it * multiplier }

    아주 좁은 영역에 있는 변수를 가두는 경우에만 클로저를 사용해야 한다(예를 들면 함수 내부에 정의한 로컬 함수). 이런 경우 자신을 둘러싸고 있는 함수의 인자나 이 함수에서 만든 임시 결과를 가두어도 안전하다. 자바와 달리 코틀린에서는 가변 변수도 가둘 수 있다. 하지만 더 안전한 프로그램을 작성하고 싶다면 가변 참조 사용을 피하라.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.