본문 바로가기
ETC

Call by value, Call by reference 너희가 뭔데?

by yeonju 2022. 8. 17.

안녕하세요.

Call by value(콜 바이 벨류), Call by reference(콜 바이 레퍼런스)에 대해 들어보신 적이 있나요?
개발자라면 또는 개발 공부를 하는 사람이라면 무조건 한번 이상은 들어봤을 거라고 생각합니다.

혹시 잘 모르겠다고요?


혹시나 이 글을 통해 처음 접했거나, 제대로 된 지식이 없다면 제가 도움을 줄 수 있게 되어 영광입니다.
이 글을 끝까지 읽는다면 여러분들도 이제 Call by value, Call by reference에 대해 잘 아는 사람이 될 테니까요. :)

그럼 잘 아는 사람이 되기 위해 같이 살펴볼까요?

Call by value(콜 바이 벨류)란?

Call by value는 말 그대로 단순 '값'을 전달하는 방식입니다.
인자로 받은 값을 복사하여 처리하는 방식인데요.

이렇게 말로만 보면 아직 이해가 안 될 수도 있습니다.
제가 만들어온 자료를 한 번 같이 살펴볼까요?

여기 rectangle이라는 사각형이 있습니다.
이 사각형을 fillColor라는 함수에 넣어 색을 채워볼게요.

사각형에 색이 채워졌습니다.
그런데 rectangle을 print 해보니 초기의 색이 채워지지 않은 상태죠?

단순히 값만 전달됐기 때문에 기존의 값은 변화하지 않는 겁니다.

어떤가요? 이제 이해가 되신 것 같나요?

그럼 조금 더 깊게 들어가서 Call by value의 장단점도 알아봅시다.

Call by value의 장점

값을 복사하여 처리하기 때문에 안전합니다.
또한 기존 값이 보존이 됩니다.

원래 값을 보존하고 싶을 때 사용하면 좋겠죠?

Call by value의 단점

값을 복사하여 사용하기 때문에 메모리 사용량이 늘어납니다.



이제 Call by reference에 대해 알아봅시다.

Call by reference(콜 바이 레퍼런스)란?

Call by reference는 주소 값을 '참조'하는 방식입니다.
인자로 받은 값의 주소를 참조하여 처리하는 방식인데요.

자료를 한번 살펴볼까요?

여기 또 rectangle이라는 사각형이 있습니다.
다시 한 번 이 사각형을 fillColor라는 함수를 이용해 색을 채워볼게요.

사각형이 채워졌습니다.
다시 rectangle을 print 해보니 이번엔 사각형이 채워져 있네요?

받은 값의 주소를 참조하기 때문에 기존의 값이 변화하는 겁니다.

그럼 조금 더 깊게 들어가서 Call by reference의 장단점도 알아봅시다.

Call by reference의 장점

값을 복사하지 않고 처리하기 때문에 속도가 빠릅니다.

복잡한 연산에 사용하기에 좋겠죠?

Call by reference의 단점

직접 주소 값에 참조를 하기에 원래의 값이 영향을 받게 됩니다.



네! 이제 여러분 모두 잘 아는 사람이 되셨습니다.
축하드립니다.

취업 준비 당시 면접을 위해 공부를 하다가 '기본 CS 지식인만큼 iOS, Swift가 아니더라도 이건 꼭 블로그에 잘 적어서 공유해두면 좋겠다.'라는 생각을 했었는데요.
제가 공유한 지식이 많은 도움이 되셨길 바랍니다.

부족한 점이나 궁금한 점은 댓글로 남겨주시면 감사하겠습니다.
언제든지 피드백은 환영입니다. :)