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

명석님의 프로필 이미지
명석

작성한 질문수

김영한의 실전 자바 - 중급 1편

지역 클래스 - 지역 변수 캡처3

지역 변수 값 변경에 대하여 질문 있습니다.

작성

·

221

0


=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

process 메서드가 실행되면 내부 코드가 순차적으로 실행되는걸로 알고 있습니다. 그러면 LocalPrinter 인스턴스 생성 시점이 localVar = 2;로 지역변수 값 변경 시점보다 나중이니까 변경된 2의 값으로 캡처가 되는게 아닌가요? LocalPrinter printer = new LocalPrinter(); 이코드 다음에 값 변경은 안되는게 이해가 되지만 그전에 변경은 왜 안되는지 모르겠습니다.

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 명석님

다음을 참고해주세요.

https://www.inflearn.com/questions/1233252

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

명석님의 질문은 지역 변수의 값 변경과 관련하여, 특히 Java 내부 클래스에서 지역 변수가 어떻게 캡처되는지에 대한 궁금증 같습니다. Java에서 지역 내부 클래스나 익명 클래스는 주변 스코프의 지역 변수를 “캡쳐”할 때 이 변수들을 사실상 최종(final) 변수로 취급합니다. 여기서 중요한 점은 지역 변수가 변경되지 않고 읽기만 가능해야 한다는 것이며, 이는 동시성 문제를 방지하기 위한 것입니다.

이와 관련하여, 명석님이 질문하신 내용에 가장 직접적으로 연결되는 설명을 담고 있는 기존 질문을 찾았습니다. “사실상 final 변수에 관하여 (값의 변경에 관한 질문입니다)”에서는 지역 변수를 변경하는 것과 관련하여, 지역 클래스나 익명 클래스 내에서 사용되는 변수는 최종적이어야 한다는 제약을 설명하고 있습니다.

이 답변에서는 프로그래밍 언어를 설계하는 입장에서 인스턴스 생성 시점을 컴파일 타임에 정확히 파악하기 어려우므로, 코드 실행 도중 변수의 값이 변경되는 것을 허용하지 않는다는 설명을 제공하고 있습니다. 동일한 이유로, LocalPrinter 인스턴스 생성 전에 localVar의 값이 변경되더라도, 이런 변경을 허용하지 않는 것은 Java 언어 설계의 일관성을 유지하기 위함입니다. 이는 코드의 실행 흐름을 개선하고 오류를 줄이기 위한 목적을 가지고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

명석님의 프로필 이미지
명석

작성한 질문수

질문하기