Inflearn brand logo image

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

생각하는자님의 프로필 이미지
생각하는자

작성한 질문수

김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍

람다 vs 익명 클래스1

변수 캡쳐 질문

해결된 질문

작성

·

56

·

수정됨

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

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

[질문 내용]
안녕하세요 궁금증이 생겨서 질문을 드립니다.
람다 vs 익명 클래스1 을 공부하다가,
변수지역 캡쳐, 부분이 기억이 안 나서 다시 듣게 되었는데요.(지역 클래스 - 지역 변수 캡쳐3)

공부를 하고 다시 듣다 보니 localVar를 변경할수 있는 방법이 생각이 나더라고요.

그래서 변경이 가능한지 테스트를 해보고, 바꾸어 보았습니다.

바꾸어 보니, 값이 변경 할 수 있다는 사실을 알수 있었습니다.(사진 참조)

image.png

d

image.png

 

여기서 질문이 생깁니다.

이런식 으로 바꿀 수 있는데, 현업 에서도 이렇게 바꾸는 경우가 있냐요?
답변 부탁 드립니다.

답변 1

1

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

생각하는자님의 질문에 답변 드리겠습니다. 지역 클래스에서 지역 변수를 캡쳐할 때, 변수가 사실상 final이어야 한다는 점에 대한 궁금증을 갖고 계신 것 같습니다. Java에서는 지역 클래스나 람다에서 사용되는 지역 변수들은 캡쳐 시에 final 또는 사실상 final로 다뤄집니다. 이는, 해당 변수의 값이 객체 내부에서의 동작 완료 후 변경되지 않음을 보장하기 위함입니다.

자바는 지역 변수를 객체 내부에 저장할 때(final 또는 사실상 final 속성), 변수의 값이 메서드 종료 후에 변경될 수 있는 경우를 방지하고자 합니다. 이는 안정성과 동기화 문제를 피하기 위한 중요한 언어적 설계입니다. 그럼에도 불구하고, 리플렉션(reflection) 같은 특수한 방법을 이용하면 이를 우회하여 변수 값을 바꿀 수는 있습니다. 하지만 이는 일반적이지 않은 방법이며, 코드의 가독성을 떨어뜨리고 오류 발생 가능성을 높이기 때문에 현업에서는 잘 사용하지 않습니다.

특히, 리플렉션을 통해 변수를 수정하는 것은 매우 제한적이고 특정 상황에서만 사용되며, 일반적인 프로그램에서는 피해야 하는 접근 방식으로 간주됩니다. 리플렉션은 보통 라이브러리 개발자가 API 내부 구현을 유지보수하거나, 테스트에서 모킹을 수행할 때 주로 사용됩니다.

관련된 예시와 답변을 찾기 어렵다면 “사실상 final 변수에 관하여 (값의 변경에 관한 질문입니다)”를 참고해 보시기 바랍니다. 이 게시물을 통해 Java의 변수 캡쳐와 관련된 명쾌한 답변을 확인하실 수 있습니다.

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

생각하는자님의 프로필 이미지
생각하는자

작성한 질문수

질문하기