[Java]call by value, call by reference에 대해 설명해주세요
함수 호출 방법의 차이
Call by Value(값에 의한 호출)
JAVA는 기본적으로 참조값을 담은 레퍼런스 변수를 복사하는 Call-by-Value로 수행된다.
함수 호출시에 데이터 자체가 복사 되어 이동해서 메모리 공간을 더 잡아 먹는다
Call by Reference(참조에 의한 호출)
C/C++와 같이 변수의 주소값 자체를 가져올 방법이 없으며, 이를 넘길 수 있는 방법 또한 있지 않다.
원본 값의 메모리 주소를 복사하여 전달합니다.
Call By Reference로 전달된 값은 함수 실행 유무와 상관 없이 존재합니다.
함수 내에서 생긴 변경 사항이, 함수 외부의 외부의 값에 영향을 줍니다.
Q. 근데 자바에도 주소값을 전달하는 경우가 있지 않느냐?
c언어에서는 주소값 자체를 변경할 수 있지만 자바는 주소값 자체에 대한 변경이 아니라 객체에 대한 참조(주소)를 전달하여 상태를 변화시키는것이므로 다르다
(주소값을 직접 조작하거나 변경할 수 없다!의 관점, 그래서 자바에서는 call by address 와 같은 개념으로 불리는 경우도 있다고 한다.)
원본객체의 프로퍼티에는 접근이 가능하지만 원본 객체 자체를 변경하는것은 불가능하다
Previous[Java]call by value-call by reference에 대해 설명해주세요Next[Java]equals를 overriding 할 때 hashCode도 재정의 해야하는 이유
Last updated