개발은 재밌어야 한다
article thumbnail
Published 2021. 3. 23. 18:24
Call by value vs Call by Reference JAVA
반응형

이번에는 간단하면서도 중요한 개념인 CallCall by value와 Call by Reference에 대해서 알아보려고한다.

전공시간에 교수님이 매우 중요한 개념이라고 말씀하셨는데 면접때도 질문으로 나왔었던....

 

우선 Call by value와 Call by Reference는 일단 함수의 호출 방식을 의미한다.

 

Call by value(값에 의한 호출) - 함수에 매개 변수의 내용물을 전달하여 복사해서 사용하는 방식
Call by reference(참조에 의한 호출) - 함수에 매개 변수의 참조 주소를 참조해서 호출하는 방식

 

 

 

 

 

의미 자체로만 본다면 함수의 호출을 값에 의해서 하는가 아니면 참조에 의해서 하는가라는 차이를 알 수 있다.

 

참조와 값에 따른 호출에 대한 좋은 그림예시가 있다

Call by reference는 원래의 컵이 가지고 있는 위치를 가지고 와서 커피를 채운다. 원래의 컵 이 가지고 있는 위치 그대로를 사용하기 때문에 컵에 커피를 채우면 원래 컵에 채우는 것과 같은 상황이다.

 

Call by value는 원래의 컵을 복사해서 컵을 가져와 동일한 컵에 커피를 채우는 것과 같은 상황이다. 원래의 컵을 복사해 커피를 채웠기 때문에 복사한 컵에만 커피가 채워지고 원래의 컵에는 변화가 없다.

 

코드를 통해 두개의 차이를 한번 보자.

 

먼저 Call by Value이다.

컵에 아메리카노를 담는다는 상황을 가정한 코드이다.

커피를 붓는 메소드인 pourCoffee메소드를 사용하면 컵의 양이 10리터 만큼 늘어난 양이 나와야한다.

그런데 커피를 부었는데 여전히 컵의 양은 0이다. 

메소드에서는 컵과 아메리카노 양에 대한 값만 복사해서 가져온것이라 실질적인 컵과 아메리카노의 양에는 영향을 끼치지 못한다.

 

 

이번엔 Call by Reference를 보자

 

생성자로 컵을 생성하여 컵을 객체화해서 컵을 생성시 하나의 주소값을 가지고 있도록 했다.

이후 객체화된 컵에 아메리카노를 부으면 객체화되어 주소값을 가진 컵 객체의 주소값을 참조하여 아메리카노를 붓기 때문에 나중에 확인하면 참조한 컵에 부었기 때문에 값이 추가되어 나타난다.

 

컵를 생성한 객체를 출력해보면 좀더 객체 주소값을 참조한다는 것을 알 수 있다.

 

 

 

 

 

 

 

 

참조 사이트: www.differencebetween.info/difference-between-call-by-value-and-call-by-reference-in-programming

반응형
profile

개발은 재밌어야 한다

@ghyeong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!