← 질문 목록
#357깊이 0

람다식 내부에서 외부 지역변수를 바꿀 수 없는 이유는 무엇인가?

언어 · 런타임

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

스택에 있는 지역변수와 힙에 있는 람다의 생명주기가 다르기 때문이다.

  • 람다 인스턴스힙 영역 (오래 생존)
  • 지역 변수스택 프레임 (메서드 종료 시 소멸)

메서드가 끝나면 스택 프레임이 사라진다. 반면 힙에 생성된 람다는 더 오래 살아남을 수 있다. 존재하지 않는 메모리를 참조하는 오동작이 일어난다.

자바는 지역변수의 값을 복사해서 람다에 전달한다. 이 값을 내부나 외부에서 바꾸면 원본과 복사본의 값이 달라진다. 멀티스레드 환경에서 데이터 일관성이 깨진다.

컴파일러는 데이터 일관성을 지키려고 제약을 건다. 람다가 참조하는 지역변수가 바뀌지 않도록 final이나 실질적 final로 제한한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

람다식 내부에서 외부 지역변수를 바꿀 수 없는 이유는 무엇인가?