함수 호출방식에는 call by value와 call by reference가 있다. 이 두 가지가 어떤 의미를 갖고 있는지 알아보자.
call by value(값에 의한 호출)
- call by value는 우리가 메서드를 만들 때 보통 파라미터(parameter)를 지정하고 인자(argument)를 전달하는 코드를 작성한다. 이때 전달한 인자값이 메서드에서 파라미터를 통해 받으면서 값을 변경한 경우 메서드 내에서만 변경된 것은 call by value 방식으로 동작하고 있기 때문이다.
아래는 예시 코드이다.
#include <stdio.h>
void solution(int a, int b) {
a = 10;
b = 20;
}
int main() {
int a = 0;
int b = 0;
solution(a, b);
printf("a = %d, b= %d\n", a, b);
}
//result
//a = 0;
//b = 0;
- solution 함수에서 변수 a와 b를 각각 10과 20으로 할당하였지만 main메서드에서 조회하면 값은 모두 초기값인 0으로 출력된다.
이것과 다른 방식인 call by reference에 대해 알아보자.
call by reference(참조에 의한 호출)
- call by reference는 전달한 인자가 주소값이기 때문에 메서드에서 파라미터를 통해 받은 후 값을 변경한 경우 해당 변수값이 모두 변경된다.
이것도 코드로 이해해보자
#include <stdio.h>
void solution(int *a, int *b) {
*a = 10;
*b = 20;
}
int main() {
int a = 0;
int b = 0;
solution(&a, &b);
printf("a = %d, b= %d\n", a, b);
}
//result
//a = 10;
//b = 20;
- solution 함수에서 변수 a와 b를 각각 10과 20으로 할당하였고 이는 주소값을 할당한 것이기 때문에 main 메서드에서도 a와 b는 가각 할당된 값인 10, 20으로 출력된다.
그렇다면 java에서 call by reference가 가능할까?
java에서는 객체를 넘기면 메서드에서도 값이 변경이 가능하지만 이것은 독자적으로 각각의 주소값을 지닌 것이기 때문에 call by value라고 한다.
결론은 '불가능'이다. java version이 업데이트되고 있으니 언제가는 C언어에 존재는 포인터 개념의 기능이 추가되지 않을까?
다음은 java call by reference에 대해 아주 잘 설명되어 있는 글을 발견하여 공유하고자 한다.
https://deveric.tistory.com/92
'자기계발 > Computer Science' 카테고리의 다른 글
CS ] 실수(소수점) 계산에 오차가 발생하는 이유 (0) | 2022.08.23 |
---|---|
CS ] 오버로딩(OverLoading)과 오버라이딩(Overriding)의 차이 (0) | 2022.08.22 |
CS ] REST API 개념 정리 (0) | 2022.08.11 |
CS개념잡기 2탄 ] 프로세스, 스레드, 멀티프로세스, 멀티스레드, 동기화 (0) | 2021.12.21 |
CS개념잡기 1탄 ] 메모리의 구조 및 프로그램 실행 과정 알기 (0) | 2021.12.21 |