반응형
한창 Java를 공부하다보니, 함수 호출에 있어서 값을 불러오는 것과 주소를 참조하는 것 두가지가 있는 것을 알게 됐다.
2종류가 있는 것은 알겠는데 그럼 차이가 무엇일까?
함수 호출 방법
- Call by value(값에 의한 호출)
- Call by reference(참조에 의한 호출)
Call by value는 인자로 받은 값을 복사해 처리한다.
Call by reference는 인자로 받은 값의 주소를 직접 참조해 값에 영향을 준다.
Call by value는 프로그래밍 구조상 복사를 하기 때문에 메모리량이 늘어난다.
이 방식에서 계산량이 많다면 과부하가 일어나게 된다. 값을 복사해서 처리하는 것이기 때문에
원래의 값에는 영향이 가지 않아 안전하다.
Call by value(값에 의한 호출)
장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존된다.
단점 : 직접 참조하기 때문에 메모리 사용량이 늘어난다.
#include <stdio.h>
void swap(int num1, int num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
void main()
{
int a = 20, b = 60;
swap(a, b);
printf("a: %d, b: %d", a, b);
}
위와 같은 예시를 통해 call by value를 파악할 수 있다.
Call by reference(참조에 의한 호출)
장점 : 복사하지 않고 직접 참조를 하기에 빠르다.
단점 : 직접 참조를 하기에 원래 값이 영향을 받는다.
#include <stdio.h>
void swap(int &num1, int &num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
void main()
{
int a = 20, b = 60;
swap(a, b);
printf("a: %d, b: %d", a, b);
}
C언어에서는 포인터를 통해 매개변수의 주소값을 넘겨 참조(Reference)할 수 있다.
JAVA에서는 포인터가 따로 없으며, 기본적인 매개변수는 Call by Value지만
예외적으로 배열/클래스는 참조변수를 통해 Call by reference로 작동한다.
반응형
'Language & Framework & GIT > JAVA' 카테고리의 다른 글
[JAVA] List ? ArrayList? #2 (0) | 2022.12.20 |
---|---|
[JAVA] List ? ArrayList? #1 (0) | 2022.12.14 |
[언어공부] 코테를 위한 JAVA 뽀개기 #4 #끝 (1) | 2022.10.29 |
[언어공부] 코테를 위한 JAVA 뽀개기 #3 (0) | 2022.10.28 |
[JAVA] this / super (0) | 2022.10.22 |
댓글