이 포스트는 부스트코스 서포터즈 3기 활동을 기반으로 정리된 글입니다.

클로저

  • 람다식으로 표현된 내부 함수에서 외부 범위에 선언된 변수에 접근할 수 있는 개념
  • 람다식 안에 있는 외부 변수는 값을 유지하기 위해 람다가 포획한 변수
  • 기본적으로 함수 안에 정의된 변수는 로컬 변수로 스택에 저장되어 있다가 함수가 끝나면 같이 사라지지만, 클로저 개념에서 포획된 변수는 참조가 유지되어 종료되어도 사라지지 않고 접근하거나 수정할 수 있게 됨
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(a, b)
    }
}

 

 

+ Recent posts