본문 바로가기
Kotlin

[코틀린 용어] 클로저 의미, closure

by 붕어사랑 티스토리 2021. 12. 30.
반응형

코틀린의 람다함수를 공부하다 보면 클로저라는 단어가 나온다.

 

이게 무슨뜻일가

 

 

 

 

클로저의 뜻은 다음과 같다

 

내부함수에서 외부함수의 데이터를 사용할 경우,

외부함수의 코드불럭이 끝나도 내부함수에서 참조하는 변수는 계속 살아남아 있는 현상

fun main() {
    fun outer(): () -> Int{
        var x = 10
        var innerFunc = fun():Int{
            return println(++x)
        }
        return innerFunc
    }

    val func1 = outer()
    
    func1() // 결과: 11
    func1() // 무슨값이 나올지 한번 맞춰보세요!
}

 

첫번째 func1() 호출에서는 결과값이 11이 나옵니다.

외부함수의 변수 x의 값은 10이였고 이를 ++ 해주었으니 11이 나오는것은 당연하겠지요!

 

 

 

 

자 그럼 두번째 func1() 호출에서는 무슨 결과값이 나올까요?

 

 

역시나 외부함수의 변수 x의 값은 10이니 11이 나올까요?

 

아니면 x라는 변수값이 여전히 살아있어서 12가 나올까요?

 

 

 

정답은 외부함수의 변수가 여전히 살아 있어서 12 가 나옵니다.

 

 

 

참 쉽쥬?

 

 

그리고 코틀린에서는 람다함수나 익명함수는 클로저를 지원합니다!

 

 

 

 

 

 

 

그럼 어따 써먹나요?

클로저 예제를 보면 마치 전역변수와 비슷하지 않나요?

 

하지만 변수가 은닉되어 있습니다.

 

고로 어떤 변수를 전역변수처럼 쓰고싶은데 노출하기 싫을경우 클로저를 사용하면 이를 해결 할 수 있습니다.

 

 

 

 

 

그래서 이름이 클로저인가...? 변수가 outer 영역에 갇혀 있고 inner에서만 볼 수 있으니..

반응형

댓글