본문 바로가기
ERROR

final로 선언된 상수 컴파일에 관하여

by 김ㅋㅋㅋ 2020. 12. 24.

문제 발생


프로젝트 진행 중 간단하게 static final로 선언된 상수를 변경할 일이 생겼고 
변경 후 해당 클래스 파일만 교체하여 적용하였다.

하지만 로컬 개발환경에서는 적용이 되는데 클래스 파일을 교체한 서버에서는 톰캣을 재시작해도 적용이 안 됐다.

 

 

원인 분석


단순하게 숫자만 변경해주었고 해당 클래스에서 출력문으로 찍어봐도 나온다....
좀 더 소스를 보다가 해당 상수를 다른 곳에서 참조하는 것을 알게 되었고
혹시나 해서 구글에 검색해봤고 원인을 알 수 있었다.

자바 파일은 컴파일 할 때 참조하는 상수를 바로 값으로 교체한다.
따라서 참조된 상수를 변경해줘도 해당 상수를 참조하는 자바파일은 이미 이전 값으로 컴파일 되어있기 때문에
수정이 되질 않는다.

따라서 상수가 선언되어있는 자바 파일뿐 아니라 참조하는 자바 파일도 컴파일하여 변경해야 한다.

 

 


왼쪽 자바파일을 컴파일하여 생성된 클래스파일을 디컴파일러를 통해 열어보니 오른쪽 Test.class와 같았다.

위에서 알아본 바와 같이 main함수 내에 FINAL_TEST가 "파이널 테스트"로 아예 바뀌어서

디컴파일해도 "파이널 테스트"로 나오는 것을 확인할 수 있었다.

댓글