반응형
자바에서는 함수를 호출할때 2가지 방법이 있다.
1. call by value (값에 의한 호출)
- 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다. (c++의 경우 stack frame) 함수가 종료되면 해당 공간은 사라진다.
- 함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.
- 복사된 인자는 함수 안에서 지역적으로 사용하는 변수이다.
- JAVA의 경우 함수에 전달되는 인자의 데이터 타입에 따라서 (기본자료형 / 참조자료형 ) 함수 호출 방식이 달라짐
- 기본 자료형 : call by value 로 동작 (int, short, long, float, double, char, boolean)
- 참조 자료형 : call by reference 로 동작 (Array, Class Instance)
2. call by reference (참조에 의한 호출)
- 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다. (예: stack frame) 함수가 종료되면 해당 공간은 사라진다.
- call by reference 참조에 의한 호출방식은 함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달한다. (해당 변수를 가르킨다.)
- 함수 안에서 인자의 값이 변경되면, 함수 호출시에 있던 변수들도 값이 바뀐다.
예시 코드는 아래와 같다.
#include <iostream> using namespace std; //두 수를 함수 내에서 바꿉니다. void func_by_value(int a, int b) { int temp = a; a = b; b = temp; } //두 수를 함수 내에서 바꿉니다. void func_by_ref(int & a, int & b) //포인터로도 구현 가능 { int temp = a; a = b; b = temp; } int main(void) { int a = 10; int b = 20; cout << "before function" << endl; cout << "a : " << a << endl; cout << " b : " << b << endl<<endl<<endl; #if 0 func_by_value(a, b); // a, b 의 값은 그대로 #else func_by_ref(a, b); // a, b 의 값이 서로 바뀌어 있다. #endif cout << "after function" << endl; cout << "a : " << a << endl; cout << " b : " << b << endl << endl << endl; return 0; } |
call by reference 를 사용할 경우엔 이렇게 위치를 참조해서 해당 값이 바뀌는걸 볼수 있다.
반응형
'IT > Java' 카테고리의 다른 글
Open API 3.0 Swagger v3 상세설정(23/01/08) (1) | 2023.01.07 |
---|---|
자바에서 ltrim과 rtrim 구현하기 (17) | 2023.01.07 |
findBy 비교 조건들 (15) | 2023.01.04 |
Constructor Injection 방식을 권장하는 이유 (12) | 2023.01.03 |
spring boot에서 actuator 사용하기 (8) | 2023.01.01 |
댓글