Call
์๋ฐ๋ call by value์ call by reference ์ค ๋ฌด์์ธ๊ฐ์?
์๋ฐ๋ call by value์ด๋ค.
์๋ฐ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ๋ ๊ธฐ๋ณธ๊ฐ์ด๋ ์ฐธ์กฐ๊ฐ์ด๋ ๊ฐ์ ํญ์ ๋ณต์ฌํด์ ์ ๋ฌํ๋ค.
์๋ก์ด ์คํ ํ๋ ์์ด ์์ฑ๋๋ฉด ํด๋น ์คํ ํ๋ ์์๋ ๋ณต์ฌํด์ ๋๊ธด ์ฐธ์กฐ๊ฐ์ ํ ์์ญ์์ ์๋กญ๊ฒ ์ถ๊ฐํด ์ฐธ์กฐํ๋ค.
๋๋ฌธ์ ๊ธฐ์กด ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ณ , ์๋์ ๊ฐ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๊ฐ์ฒด์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์์ง๋ง, ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ ์์ฒด๋ ๋ณ๊ฒฝํ ์ ์๋ค.
call by value์ call by reference ์ ์ฐจ์ด ์์๋ฅผ ์ฝ๋๋ฅผ ํตํด ๋ณด์ฌ์ฃผ์ธ์.
public class Main {
public static void main(String[] args) {
int value = 5;
callByValue(value);
System.out.println("value = " + value); //value = 5
int[] ref = {5};
callByRef(ref);
System.out.println("ref[0] = " + ref[0]); //ref[0] = 6
}
private static void callByValue(int value) {
value++;
}
private static void callByRef(int[] ref) {
ref[0]++;
}
}call by value๋ ์ธ์๋ก ๋ฐ์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด๊ฐvalue์๋ ์๋ฌด ์ํฅ์ด ์๋ค.call by reference๋ ์ธ์๋ก ๋ฐ์ ๊ฐ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ์ฐธ์กฐref์๋ ์ํฅ์ด ์๋ค.
public class Main {
public static void main(String[] args) {
Person p1 = new Person(10);
//์คํ: p1 => ํ: x001, age=10
System.out.println("before : " + p1.age); //10
addAge(p1);
//์คํ: p1 => ํ: x001, age=11
System.out.println("after1 : " + p1.age); //11
changePerson(p1);
//์คํ: p1 => ํ: x001, age=11
System.out.println("after2 : " + p1.age); //11
}
private static void changePerson(Person p1) {
p1 = new Person(30);
//์คํ: p1 => ํ: x002, age = 30
//๋ฉ์๋๊ฐ ๋๋๊ณ ์คํ ํ๋ ์์์ ์ ๊ฑฐ๋๋ฉด p1์ด ์ฐธ์กฐํ๋ x002๋ GC ๋์
//์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํด์ ๋๊ฒผ๊ธฐ ๋๋ฌธ์ main์ x001์ ๊ทธ๋๋ก
}
private static void addAge(Person p1) {
p1.age++;
}
static class Person{
int age;
public Person(int age) {
this.age = age;
}
}
}
์ฐธ๊ณ
Last updated