pass-by-value? or pass-by-reference? in JAVA JAVA 개발을 8년째 해오고 있지만, 아직도 기본이 부족하다고 느낄때가 참 많습니다. 최근에는 대학교 1학년 학부 생활할때쯤 배웠던 'pass-by-value (call-by-value)' / 'pass-by-reference (call-by-reference)'에 대해서 다시 한번 개념을 정리한 계기가 있었습니다. 먼저 퀴즈를 통해 접근해 보도록 하죠. 퀴즈) 다음과 같은 코드에서 출력되는 count값은? @Test public void passByValueTest () { Integer count = 1 ; increment( count ) ; System. out .println( "* count : " + count ) ; } private void increment (Integer count) { count++ ; ++count ; } 아마도 대부분의 사람들이 "3"이라고 대답하지 않을까 싶습니다. 또는 증가 연산자인 '++' 의 위치에 대해서 뭔가 함정이 있을까 고민할수도 있겠네요. 누군가는 당연하다고 여길지 모르겠으나 정답은 " 1 " 입니다. 즉, count값은 변경되지 않습니다. (정확하게 얘기하면 passByValueTest() 메소드안의 count값이 변경되지 않습니다.) JAVA만 공부하셨던 분들은 당연하게 받아들이시는 분들도 있으실테지만, C나 여타 다른 언어를 함께 공부하셨던 분들은 약간 혼란스러운 부분이 있을수 있을것 같습니다. (JAVA에서 object를 넘기면 pass-by-reference 아닌가?? JAVA에선 reference를 어떻게 넘기지?) JAVA엔 포인터를 안쪽에 숨기고 있기 때문에 이런 혼란스러움이 생기는것 같은데요, JAVA는 오직 p...