Call By Value와 Call By Reference에 대해 설명
메서드 호출시 인자로 전달하는 방법은 크게 2가지. Call By Value, Call By Reference
Call By Value
메서드 호출시 값 자체를 넘겨주는 방식.
메서드를 호출하는 함수의 변수와 호출된 함수의 파라미터는 서로 다른 변수
Call By Reference
메서드를 호출할 때, 참조를 직접 전달하는 방식
호출하는 변수와 호출된 함수의 파라미터는 동일한 변수임
JAVA의 호출방식? → Call By Value
JAVA는 Call By Value 만 존재함
자바 변수는 스택 영역에 할당.
변수가 원시 타입인 경우에는 값 또한 스택 영역에 저장됨
호출 메서드의 파라미터가 변경되어도 원본은 수정 안됨.
호출된 메서드의 스택 프레임에 인자로 주어진 변수의 값이 복사되어 사용되기 때문
참조 타입인 경우 객체 자체는 힙 영역에 저장되고 스택 영역에 존재하는 변수가 객체의 주소를 가지고 있음
호출된 메서드 내부에서 인자를 수정하면 원본이 수정될 수 있음
스택 프레임에 참조타입 변수를 중복해서 생성하기 때문에 Call By Value로 판단
(같은 참조를 바라보는 다른 스택 변수)
foo 메서드의 스택 프레임과 var 메서드의 스택프레임에 각각 같은 student 객체 주소를가진 참조 타입 변수인 student가 존재.
[참고]
Last updated