๐ก ์ต๊ทผ ๋ด๊ฐ ๊ฐ๋ฐํ java ํ๋ก๊ทธ๋จ์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ์๋๋ฐ ์ด ๋ฌธ์ ์ ๊ด๋ จ๋์ด์์๋ค.
์๋ฐ์๋ Call by value๋ฐ์ ์๋ค
Java์์๋ "call by reference"๋ ์ง์๋์ง ์๋๋ค.
Java์์๋ ๋ชจ๋ ํจ์ ํธ์ถ์ด "call by value"๋ก ์ด๋ฃจ์ด์ง๋ค.
ํ์ง๋ง ํท๊ฐ๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
Call by value ์์
public class Example {
public static void main(String[] args) {
int x = 10;
modifyNumber(x); // int ๋ณ์๋ฅผ ํจ์์ ์ ๋ฌ
System.out.println(x); // 10
}
public static void modifyNumber(int num) {
num = 20; // int ๋ณ์๋ฅผ ์์
}
}
ํท๊ฐ๋ฆฌ๋ ์ํฉ. Call by value of reference
์ฐธ์กฐํ ๋ณ์๋ฅผ ์ธ์๋ก ์ ๋ฌํ ๊ฒฝ์ฐ, ๋ณ์์ ์ ์ฅ๋ ์ฃผ์ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋ค.
๋ฐ๋ผ์ ํจ์ ๋ด์์ ์ฐธ์กฐํ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด, ํธ์ถํ ์ธก์์๋ ๋ณ๊ฒฝ๋ ๊ฐ์ ํ์ธํ ์ ์๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ์๋ "call by reference" ๋์ "call by value of reference"๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Call by value of reference ์์
Java์์ call by value of reference๋ ์ฐธ์กฐํ ๋ณ์๋ฅผ ํจ์์ ์ธ์๋ก ์ ๋ฌํ ๋ ๋ฐ์ํ๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ArrayList๋ฅผ ํจ์์ ์ ๋ฌํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
import java.util.ArrayList;
public class Example {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
modifyList(list); // ArrayList๋ฅผ ํจ์์ ์ ๋ฌ
System.out.println(list); // ["apple", "banana", "cherry", "durian"]
}
public static void modifyList(ArrayList<String> list) {
list.add("durian"); // ArrayList๋ฅผ ์์
}
}
์ ์์์์, modifyList ํจ์๋ ArrayList<String> ํ์ ์ ์ธ์ list๋ฅผ ๋ฐ๋๋ค.
list๋ main ํจ์์์ ์์ฑ๋ ArrayList๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค.
modifyList ํจ์์์ list.add("durian")๋ฅผ ํธ์ถํ์ฌ ArrayList๋ฅผ ์์ ํ๋ฉด, ํธ์ถํ ์ธก์์๋ ๋ณ๊ฒฝ๋ ๊ฐ์ ํ์ธํ ์ ์๋ค.
list ๋ณ์๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ์ด ๋ณต์ฌ๋์ด ํจ์์ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ด ์์์์๋ call by value of reference๊ฐ ๋ฐ์ํ๋ค.
๋์ ํด๊ฒฐ๋ฒ
new ํค์๋๋ฅผ ์ด์ฉํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์๋ค.