더북(TheBook)

1.8.2.3 캡처 절

람다 소개자 []가 항상 비어 있는 건 아니다. 람다 소개자에는 람다 표현식의 바깥 범위에 있는 변수를 람다 표현식 본문에서 어떻게 접근할지 지정하는 캡처 절(capture clause)을 쓸 수 있다. [] 사이에 아무것도 지정하지 않으면 람다 표현식의 본문에서는 람다 내부에서 로컬로 정의한 변수와 인수만 사용할 수 있다. 캡처 절이 없는 람다는 람다 표현식의 바깥 범위의 어떤 것도 접근할 수 없으므로 무상태 람다 표현식(stateless lambda expression)이라 부른다. 람다 표현식의 문법은 그림 15와 같다.

▲ 그림 1-5 람다 표현식의 문법 구성

 

기본 캡처 절은 람다 표현식 정의의 바깥 범위에 있는 모든 변수에 적용된다. [=]이라고 쓰면 모든 자동 변수를 값으로 캡처해서 접근할 수 있다. 즉, 변수들의 모든 값을 람다 표현식 안에서 이용할 수 있지만, 원래 변수의 값은 변경할 수 없다. 매개변수 목록 다음에 mutable 키워드를 쓰면 람다 표현식 안에서 바깥 변수의 복제본을 수정할 수 있다. 람다는 람다를 실행할 때 값으로 캡처한 변수의 복제본의 로컬 값을 기억해서 다음 람다 실행에 전달한다는 점에서 복제본은 사실상 static이라 볼 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.