인프런 커뮤니티 질문&답변

목동 개발자님의 프로필 이미지
목동 개발자

작성한 질문수

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

17강. 코틀린에서 람다를 다루는 방법

kotlin closure 는 별도의 메모리 공간에 데이터를 복사해서 가지고 있는게 맞을까요?

작성

·

282

2

Java 에서 Final 만 사용할 수 있는게 외부 변수가 메모리에서 해제 되었을 경우, 가비지를 참조할 수 있는 것을 방지하기 위해서로 알고 있는데

 

코틀린은 이게 가능한게 아예 메모리를 통째로 떠와서 그런걸까요? ㅎㅎ

강의 영상에서 포획한다 라고 표현하신게 그런 의미 같아요!

답변 1

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요!! 크으~~ 날카로운 질문이십니다~~ 👍👍

 

결론부터 말씀드리면, 코틀린의 경우 컴파일 과정에서 가변 변수를 Object로 감싸 (포획하여), 그 Object를 람다에서 접근하게 하고 있습니다.

에서 Kotlin이 변수를 capture 하는 방식을 확인해보실 수 있는데요! 한 줄 요약 드리면, 어떤 변수를 Object로 만든 다음, 그 Object의 reference를 각 람다가 공유하는 방식입니다.

표현해주신 "메모리를 뜬다"와 비슷한 느낌이기도 하네요 ㅎㅎㅎㅎ

다만 이 원리 자체가 thread-safe 하지는 않다 보니 사용에 주의가 필요할 수 있습니다.

또 궁금하신 점 있으시면 편하게 질문 남겨주세요!

감사합니다~!! 😊 🙇

목동 개발자님의 프로필 이미지
목동 개발자

작성한 질문수

질문하기