본문 바로가기
언어와 프레임워크/Java

[JAVA] java 입장에서 call by value와 call by reference의 짧은 고찰.

by Unagi_zoso 2022. 6. 26.

자바는 기본적으로 call by value로써 정보들이 다뤄진다.

c++와 같이 call by refernce를 지원하면 좋지 않을까 생각하였지만

잠시 뒤 꼭 그러할 필요는 없겠구나 생각이 들었다.

 

c++같은 언어에서 call by reference를 사용하는 이유야 몇가지 있겠지만,

대표적으로 의도치 않은 객체 자체 복사같은 오버헤드를 막기 위해서가 그 중 한 가지이다 생각한다.

이 경우야 c++는 객체가 스택에도 만들어질 수 있어 객체 자체의 복사가 큰 비용이 들 수 있지만

 

java는 객체, 즉 인스턴스를 전부 jvm의 heap영역에서 생성하고 관리한다. 

jvm의 heap 인스턴스를 두고는 이의 위치를 참조하여 데이터를 다루는 것이다.

call by value를 통해 지나친 낭비가 일어날 상황이 다른 언어들에 비해 적은 셈이다.

 

아마 이것이 java가 call by reference에 목메지 않는 이유 중 하나가 아닐까 생각이 들었다.

 

 

 

다음 글들을 참조하였습니다.

 

https://stackoverflow.com/questions/32500418/can-an-object-be-stored-on-the-stack-instead-of-the-heap-in-java

https://www.infoworld.com/article/3512039/does-java-pass-by-reference-or-pass-by-value.html

https://www.javadude.com/articles/passbyvalue.htm

https://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value/430958#430958

 

 

본 글은 저자의 개인적인 경향이 들어갔습니다.

틀린 부분이나 부족한 부분이 있다면 알려주세요. 감사합니다.

댓글