๐ŸŒนย ์ •๋ฆฌ by ์žฅ๋ฏธ(https://velog.io/@newbiekim/)

Call By Value

ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌ๋˜๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.

๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— 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>

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-07-17 แ„‹แ…ฉแ„’แ…ฎ 4.45.15.png

์œ„์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์ž. ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„ํ–ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ change ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ์ด ๋๋‚˜๋ฉด ์‚ฌ๋ผ์งˆ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  main์ด ์‹คํ–‰ ์ค‘์ธ ๊ฑธ๋กœ ๋ฐ”๋€” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ heap ์˜์—ญ์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค(10)์— ์˜ํ–ฅ์ด ๋ผ์ณค์„๊นŒ? ๋‹น์—ฐํžˆ ์•„๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ x ํ˜ผ์ž ์ € ์œ„์—์„œ ์ง€์ง€๊ณ  ๋ณถ๊ณ  ๋๋‚œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•„๋ฌด๋ฆฌ change ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค ํ•œ๋“ค main์—์„œ์˜ d.x ๊ฐ’์ด 1000์œผ๋กœ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.