본문 바로가기
JAVA

Call by value & reference

by orioncsy 2023. 4. 7.

Call by value & reference

개념

Call by value

  • 값에 의한 호출
  • 함수가 호출될 때 메모리에 함수를 위한 별도의 공간을 생성하고 전달되는 파라미터를 이곳에 저장
  • 복사된 인자는 지역적으로 사용하고 사라짐
  • 데이터를 복사하여 전달하기 때문에 원본 데이터가 변경되지 않지만 인자를 메모리에 할당해줘야 하기 때문에 메모리 공간을 더 많이 잡는다.

Call by refrence

  • 참조를 통한 호출
  • 함수가 호출될 때 인자의 레퍼런스를 전달
  • 함수 내에서 인자 값이 변경되면 전달된 인자 값도 변경
  • 메모리 공간을 따로 할당해서 인자를 저장하지는 않지만 원본 데이터 값이 변경될 수 있다.

자바의 함수 호출

방식

  • java에서는 항상 call by value로 함수를 호출
  • C/C++와 다르게 자바에서는 주소값을 가져올 수 없고 인자로 넘길 수도 없다.
  • 자바에서는 변수를 할당할 때 주소값을 저장하기 때문에 함수를 호출할 때 변수의 주소값을 복사하여 전달하는 call by value로만 호출한다.
  • 속성 값을 변경하는 것은 가능하지만 원본 객체를 변경하는 것은 불가능하다.

차이

  • C/C++에서는 생성한 변수마다 메모리를 할당하고 값을 할당한다.
  • 자바에서는 생성한 변수마다 메모리를 할당하고 주소 값을 저장하고 값은 다른 메모리에 저장
  • 자바에서는 할당된 위치를 값으로 가지고 있다.

Reference

https://gyoogle.dev/blog/computer-language/Java/Call by value & Call by reference.html

'JAVA' 카테고리의 다른 글

Record  (0) 2023.04.18
String  (0) 2023.04.17
Intrinsic Lock  (0) 2023.04.06
Casting  (0) 2023.04.04
Wrapper Class  (0) 2023.04.02