-
[목터뷰]Call by reference란 무엇이고 보통 어떻게 쓰이나요?목터뷰 2023. 8. 8. 20:55
함수 호출방식중 하나로 call by value(값에 의한 호출) call by reference(참조에 의한 호출) 두가지가 있다.
간단히 매개변수 사용시 실제값 /주소 가져오기 의 차이
Call by value
값에 의한 호출- 변수값을 복사해서 함수 인자로 전달하는것
- 함수 안에서 인자 값이 변경되어도, 외부의 변수 값은 변경되지 않는다.
- 변수값이 바뀔 위험은 없지만 메소드 실행시 생기는 메모리 공간을 더 잡아먹는편
Call by reference
참조에 의한 호출- 변수의 주소를 복사해서 인자로 전달하는것
- 레퍼런스를 전달하는것이기에 함수 안에서 인자값이 변경되면 외부 변수 값 역시 바뀐다.
- 변수값 변동 위험이 있지만 메소드 실행 메모리 공간은 적게 할당된다.
public class main { public static void main(String[] args) { Sample sample = new Sample(); int var = 1; // primitive 타입 변수 int int[] arr = { 1 }; // reference 타입 변수 int[] 배열 // 변수 자체를 보냄 (call by value) add_value(var); System.out.println(var); // 1 : 값 변화가 없음 // 배열 자체를 보냄 (call by reference) add_reference(arr); System.out.println(arr[0]); // 101 : 값이 변화함 } static void add_value(int var_arg) { var_arg += 100; } static void add_reference(int[] arr_arg) { arr_arg[0] += 100; } }
그런데
자바는 오직 Call by Value 로만 동작한다.
애초에 자바는 개발자가 직접 메모리 주소(포인터?)에 접근하지 못하게 조치했기 때문
참고사이트
더보기'목터뷰' 카테고리의 다른 글
인덱스란 무엇이고 일반적인 원리는 어떠한지 설명해실 수 있을까요? (0) 2023.08.22 Annotation이란 무엇이고 구체적으로 어떤 것이 있는지 예시를 들어 설명해주실 수 있을까요? (0) 2023.08.14 [목터뷰] 스택과 큐의 차이(Stacks vs Queue) (0) 2023.08.07 시간 복잡도 (Time complexity)&공간 복잡도 (Space complexity) (0) 2023.08.04 CORS 교차 출처 리소스 공유 (0) 2023.08.04