기타/What I Learned

[TIL] Kotlin - 클로저(Closure)

가죽방패 2022. 2. 17. 13:52

※ 클로저(Closure)

- 람다식으로 표현된 내부 함수에서 외부 범위에 선언된 변수에 접근할 수 있는 개념

- 람다식 안에 있는 외부 변수는 값을 유지하기 위해 람다가 포획(capture)한 변수

 

기본적으로 함수 안에 정의된 변수는 로컬 변수로 스택에 저장되어 있다 함수가 끝나면 같이 사라지게 되지만

클로저 개념에서 포획한 변수는 참조가 유지되어 종료되어도 사라지지 않고 접근하거나 수정할 수 있다.

fun main() {

	val calc = Calc()
    var result = 0 // 외부의 변수
    calc.addNum(2,3) { x, y -> result = x + y } // 클로저
    println(result) // 값을 유지해 5 출력
}

class Calc {
	fun addNum(a: Int, b: Int, add: (Int, Int) -> Unit) { // 람다식 add에는 반환값이 없음
    	add(a, b)
    }
}

함수 매개변수에 접근

- 함수 자체를 같이 포획하여 해당 매개변수에 접근함