이 포스트는 부스트코스 서포터즈 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)
}
}
'부스트코스 서포터즈 3기' 카테고리의 다른 글
[부스트코스] 코틀린 제공 표준 라이브러리 함수2 (run(), with(), use()) (0) | 2021.02.09 |
---|---|
[부스트코스] 코틀린 제공 표준 라이브러리 함수1 (let(), apply(), also()) (0) | 2021.02.08 |
[부스트코스] 흐름의 중단과 반환, 예외 처리 (0) | 2021.01.28 |
[부스트코스] 조건문과 반복문 (0) | 2021.01.27 |
[부스트코스] 함수와 함수의 범위 (Scope) (0) | 2021.01.22 |