자라는 재미들/코코아

w1 - day2 - Call by Value , Call by reference

자란다 2021. 11. 2. 20:42
728x90
반응형
  • Call by Value, Call by Reference
  • 자바는 primitive의 경우 call by value, 객체의 경우는 call by reference
  • 실제 자바는 Call by Value 뿐이다.

Call by Value 는 값을 넘기는 것
Call by Reference 는 주소를 넘기는 것 이다

 

 

swap 으로 알아보기

예시 1    Call by Value 

swap 함수에 value 넘기기

 

결과

스왑전후의 결과가 같다. 

같은 이유 : main 에서 만든 변수 a,b 의 주소가 각각 x, y 라고 했을때 
swap() 로 넘겨져서 메서드가 수행되는 동안 사용되는 변수들은 swap() 내부에 새로생긴 a,b 이기 때문에 기존 x,y 의 주소와 다르다.  때문에 다른 주소에서 swap를 해봤자. 기존에 main의 a,b 값은 그대로다.

 

예시 2 Call by reference

 

call by reference

 

결과

잘 바뀌어있다.

바뀐 이유 : 메인에서 선언된 CallTest 타입의 변수 a,b 는 각각 객체를 생성하여 x,y 주소에 저장된 1,2 의 주소값을 저장하게 된다. 이후 swap() 는 1,2가 저장된 주소를 참조하여 연산하기 때문에 원본데이터가 변하게 된다. 

Call byreference 는 메서드 호출 시 사용되는 인자 값의 메모리에 저장되어있는 주소를 복사하여 보낸다. 

 

  • 실제 자바는 Call by Value 뿐이다.

라고 볼 수 있는 이유는 결국 주소값을 넘기기 때문이다. 

 

 

 

 

참고링크
https://wikidocs.net/265
http://dhplanner.blogspot.com/2009/11/java-%EC%97%90%EC%84%9C%EC%9D%98-call-by-value-%EC%99%80-call-by.html
https://re-build.tistory.com/3

728x90
반응형

'자라는 재미들 > 코코아' 카테고리의 다른 글

public static void main(String[] args) 헬로월드!  (0) 2021.11.29
BufferedReader  (0) 2021.11.29
w1 - day2 - public static void main(String[] args) 헬로월드!  (0) 2021.11.02
w1 - day2 - BufferedReader  (0) 2021.11.02
W1 - day2  (0) 2021.11.02