지나가던 신입개발자인데, 많은 토론이 오고가는것 같아 답글 남겨봅니다.
우선 위에서 정리되었듯 자바는 CBV가 맞습니다.
다만, Call By Reference 처럼 동작한다고 여겨지는 이유는, 객체의 값에 대한 복사가 아닌 참조변수의 값에 대한 복사가 이루어지기 때문입니다.
위 코드를 예시로 들자면 tc라는 참조변수는 "tc가 참조하는 객체의 주소"를 stack 에 저장합니다. 그리고 이 저장된 "객체의 주소값" 또한 stack 에서의 주소를 가지게 되죠.
("stack 에서의 주소", "tc가 참조하는 객체의 주소") 를 ("tcRef", "rValue")라고 부르겠습니다.
이때 이 tc를 함수의 인자로 넘겨주면, 우선 tcRef를 통해 stack 에 접근합니다, 이때 rValue를 얻게되는데요. 이 rValue라는 값을 복사한 뒤, changeObject의 인자인 obj로서 할당합니다. 즉 obj라는 참조변수가 생기고, 이 참조변수는 똑같이 rValue를 값으로 하여 stack 에 저장됩니다. 즉 ("objRef", "rValue")형태가 새로 생기는거죠.
그렇기때문에 결과적으로 obj와 tc는 같은 인스턴스를 참조하는 서로 다른 두 참조변수가 되는 것 입니다.
윗분중, 이를 CBV라고 칭할 경우 C언어도 CBV에 해당하는지에 대해 의문을 제기해주신 분이 계셧는데요.
C언어는 포인터를 통해 tc 라는 참조변수에 대한 주소값, 즉 tcRef 자체를 인자로서 넘길 수 있습니다. 이때 포인터 형식 즉 주소형식으로 보낼 수 있기 때문에 CBR이라고 칭하는 것 입니다.
Java에서는 소스코드상에서 C의 포인터처럼 실제 stack의 메모리값을 변수로서 저장하거나(*) 이 값을 통해 메모리에 저장된 값을 가져오기 (&)어렵습니다. (적어도 제가 아는 방법중에서는 없어요. reflection 쪽 기술중에 있을 수 도 있어서 확실친 않습니다.)
따라서 Java가 자연스럽게 CBV방식을 따르게 되었다 라고 인지하시면 될 것 같습니다.
이미 어느정도 정리된 토픽에 많이 늦게 참여하는듯 해서 조심스럽네요. 다들 추운 겨울따뜻하고 좋은 하루 보내시길 바라며 글을 마칩니다.
안녕하세요. 한국에서 스타트업 하는 대표입니다.
마켓 플랫폼 런칭 준비중인데 한국에서 하는 글로벌 음악 데이터 마켓 플랫폼입니다.
페이팔에서 마켓 플랫폼은 사전 승인을 받아야한다는데요.거절을 받았습니다.
진짜 어떻게 해야하나요? 거절을 받은 사유도 거절을 준 부서와도 연락도 할수 없는 상황입니다.
어떻게 해야하는지 도와주시면 정말 감사드리겠습니다..
정말 지금 울고 싶습니다..