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 |