Call by reference란 무엇이고 보통 어떻게 쓰이나?

jaeyong Lee·2024년 10월 1일

Backend Development

목록 보기
4/7
post-thumbnail

정의

call by reference는 참조 주소(메모리 주소를) 직접 넘긴다.

java 에서의 call by reference(참조에 의한 호출)

  1. java는 call by reference 대신에 call by value만을 지원 -> 참조 주소를 직접 바꾸지 못한다.
  2. 메서드에서 return안하고 값만 변경했을 시 원시형은 메서드안에서만 값만 바뀌어 main에서 적용이 안된다.
  3. 참조형은 주소안에 있는 값을 바꿔버리기 때문에 main에서도 변경된 값이 나온다.

즉 Java에서는 지원하지 않고 call by value 값을 넘기는 방식으로 동작한다.

C언어 포인터

메모리 주소(pointer)를 집접 다룰 수 있다 -> call by reference 구현 가능

정리

call by value : 메서드에 변수를 전달할 때 보낸 값이 복사되어 메서드 내에서 사용된다.
call by reference : 메서드에 변수를 전달할 때 메모리 주소가 전달되어 메서드내에서 메모리 주소를 변경하면 호출자의 변수도 변경된다. (주소자체를 변경할 수 있다)

java -> 참조된 값 자체는 변경 가능하지만 참조된 주소 자체는 변경 불가하다.
++)spring -> 스프링에서도 객체를 전달받아 객체 내부의 상태를 변경한다.

회고

개발을 공부하다 보면 가끔 "이걸 왜 공부하지?" 혹은 "이건 내 파트가 아닌 것 같은데?"라는 의문이 들 때가 있다. 하지만 C 언어의 포인터를 정보처리기사 공부를 통해 접했을 때, 위에서 다룬 call by reference 개념이 한 번에 이해된 것을 보면, 결국 이런 기본기들이 쌓여 전체적인 이해도를 높여준다는 것을 알게 된다. 이러한 경험은 꾸준히 기본기를 다지는 것이 얼마나 중요한지 다시금 깨닫게 한다.

0개의 댓글