๐นย ์ ๋ฆฌ by ์ฅ๋ฏธ(https://velog.io/@newbiekim/)
ํจ์ ํธ์ถ ์ ์ ๋ฌ๋๋ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํ์ฌ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๋ค.
๊ฐ์ ๋ณต์ฌํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ Call By Value์ ์ํด ๋์ด์จ ๊ฐ์ ์ฆ๊ฐ์์ผ๋ ์๋์ ๊ฐ์ด ๋ณด์กด๋๋ค.
๋ํ, ๊ฐ์ ๋ณต์ฌํ์ฌ ๋๊ธฐ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ค.
public class CallByValueExample {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main(): x = " + d.x);
change(d.x);
System.out.println("change(d.x) ๋ฉ์๋ ํธ์ถ ํ");
System.out.println("main(): x = " + d.x);
}
public static void change(int x) {
x = 1000;
System.out.println("change(): x = " + x);
}
}
์์ ์ฝ๋๋ฅผ ์คํํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
<aside> ๐ main(): x = 10
change(): x = 1000
change(d.x) ๋ฉ์๋ ํธ์ถ ํ
main(): x = 10
</aside>
์์ ์ด๋ฏธ์ง๋ฅผ ๋ณด์. ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ตํ๊ฒ ํํํ๋ค.
๋ฉ๋ชจ๋ฆฌ ์์์ change ๋ฉ์๋๋ ํธ์ถ์ด ๋๋๋ฉด ์ฌ๋ผ์ง ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ main์ด ์คํ ์ค์ธ ๊ฑธ๋ก ๋ฐ๋ ๊ฒ์ด๋ค. ๊ทธ๋ผ heap ์์ญ์ ์๋ ์ธ์คํด์ค(10)์ ์ํฅ์ด ๋ผ์ณค์๊น? ๋น์ฐํ ์๋๋ค. ๊ทธ๋ฅ x ํผ์ ์ ์์์ ์ง์ง๊ณ ๋ณถ๊ณ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์๋ฌด๋ฆฌ change ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค ํ๋ค main์์์ d.x ๊ฐ์ด 1000์ผ๋ก ๋ฐ๋์ง ์๋๋ค.