가끔 함수를 작성하곤 할 때, 인자 전달 및 매개변수의 전달 방식이 헷갈려 헤매던 경우가 있었다.
이를 방지하고자 이번 포스트에서 정리를 해보려고 한다.
우선 인자 전달 및 매개변수의 전달 방식에는 총 2가지 방법이 존재한다.
- 값의 전달(Call by value)
- 객체의 전달(Call by reference)
package week_4;
// 매개변수 전달 방법 비교
class myChar{
char x;
char y;
}
public class Ex04_09 {
static char func1(char x, char y){
char imsi;
imsi = x;
x = y;
y = imsi;
}
static void func2(myChar ch){
char imsi;
imsi = ch.x;
ch.x = ch.y;
ch.y = imsi;
}
public static void main(String[] args) {
char x = 'A', y = 'Z';
System.out.printf("원래 값 : x = %c, y = %c\n", x, y); // A, Z
func1(x, y);
System.out.printf("값을 전달 후 : x = %c, y = %c\n", x, y); // A, Z (변함 없음 - 값이 복사된 것일 뿐이기 때문)
myChar ch = new myChar();
ch.x = 'A';
ch.y = 'Z';
System.out.printf("원래 값 : x = %c, y = %c\n", ch.x, ch.y); // A, Z
func2(ch);
System.out.printf("값을 전달 후 : x = %c, y = %c\n", ch.x, ch.y); // Z, A (변함 있음 - 레퍼런스를 전달하여 실제 값을 공유한다.)
}
}