inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

필드 탐색과 값 변경

필드 탐색과 값 변경 - 리플렉션 코드 질문

해결된 질문

188

생각하는자

작성한 질문수 139

0

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


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

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

[질문 내용]
안녕하세요.

세션13 - '필드 탐색과 값 변경' 복습을 하다가 의문점이 생겨서 질문을 드립니다.

영한 님이 리플렉션을 이용해서 name의 filed 값을 변경 하는 것을 보고 'final로 변경하면 안되겠지.'라는 생각을 하게 되었습니다.
그래서 userTest를 만들어서 name을 final로 변경해 보고 실험해보았습니다.(당연히 예외 터질 것을 예상 하고요)

근데 왠걸? 저의 예상과는 다르게 결과가 나오는 것을 보고, "......" 밖에 말이 안나 옵니다.

 

image.png

이게 코드 결과입니다.
왜 이렇게 나오는지 설명해 주실 수 있으신가요?
(내용 수정)


답변 부탁 드립니다.

java 네트워크 객체지향

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
생각하는자님, 리플렉션을 이용한 필드의 값 변경에 대해 질문해 주셨네요.

리플렉션을 통해 privatefinal 필드의 접근 및 변경이 가능합니다. 하지만 원래 final 필드는 한 번 초기화되면 그 값을 변경할 수 없도록 되어 있습니다. 리플렉션을 사용할 때, final 필드의 경우에는 주의사항이 있습니다. 리플렉션을 이용해 final 필드의 값을 변경하면, 실제로 그 필드의 값이 변경될 수도 있지만, 이는 보장된 동작이 아닙니다. 특히, JIT 컴파일러의 최적화나 다른 런타임 환경에 따라 다른 동작을 보일 수 있습니다.

또한, 자바의 경우 String과 같은 불변 객체는 메모리에서 참조하는 방식으로 인해 변경이 어렵습니다. 그러나 특정한 환경에서는 예외적인 결과가 나올 수 있습니다.

기본적으로, 리플렉션은 코드 테스트나 런타임에 제한적인 사용을 목적으로 합니다. 예제에서는 리플렉션을 통해 name 필드의 값을 변경하는 흐름을 점검해 보는 실험이었던 것 같습니다. 이상한 결과가 나왔다면, 그 이유는 런타임 환경이나 JIT 최적화로 인해 발생할 수 있는 상황일 것입니다.

아래에 Spring Boot Hot Swapping에 대한 링크를 제공해드립니다.
Spring Boot를 사용 중이라면, 클래스를 재로딩하여 오류를 방지하는 데 도움이 될 수 있습니다.
관련 자료도 함께 확인해 보시길 추천드립니다.

Spring Boot Hot Swapping

더 궁금한 점이 있다면 언제든지 질문해 주세요!

1

생각하는자

일단 알수 있는 것은, 리플레션 을 통해서 private랑 final 값이 변경할 수 있다는 점과, 리플렉션을 완전히 잘못 사용하면 아주 위험한 코드가 된다는 거네요. 그리고 링크 봤는데 무슨 내용인지 모르겠네요..

RequestHandler 버전 간 process() 파라미터 차이 질문

0

76

2

리플렉션 default

0

57

1

그럼 SOURCE나 CLASS는 어떤 경우에 사용하나요?

0

83

2

네트워크 프로그램 자원종료 Socket 정리 시 closed 사용 문의

0

105

2

FileInputStream의 transferTo 사용 시 Buffer 문의

0

67

1

오타 제보 드립니다

0

76

2

강좌 복습 팁이 있으신 분들 공유해주시면 감사하겠습니다.

0

114

1

16강 질문있습니다.

0

53

1

한글이 깨질 떄 어떻게 해야 하나요?

0

83

1

자원 정리시 에러가 발생 했을 때 메모리 상황 및 실무에서 로그 확인 방법

0

96

1

인텔리제이에서 네모(스탑버튼) 누르는 것의 의미

-1

71

1

강의 섹션 8: 네드워크 -프로그램 3부분 10:45 오타?

0

90

2

제대로 이해한게 맞나 궁금합니다

0

80

1

File,Files 강의 2번쨰 Files 07:30 에 tmep 파일들을 다 지운건가요 ?

0

65

1

/.well-known/appspecific/com.chrome.devtools.json 에러에 대해서

0

639

1

Socket 자원을 정리할때 stream 을 정리하지 않는 이유가 궁금합니다.

0

95

1

클라이언트 강제종료시 오류 메세지

0

112

2

고급 2편에는 퀴즈가 없네요?

0

102

1

55. 네트워크 프로그램5 - 자원정리2 질문

0

69

1

클라이언트가 FIN과 함께 보내는 ACK는 무엇에 대한건가요?

1

111

2

BufferedInputStream이 1바이트씩 조회해도 성능이 좋은 이유

0

83

1

오타제보

0

65

2

문자 집합 호환성 여부를 판단할 때

0

55

1

utf-8, char

0

57

1