Java์ Call by value(pass by value)
C++์์์ swap() ์ ํธ๋ฆฌํฐ ํจ์๋ ์ฃผ์๊ฐ์ ๊ตํํ๋ call by reference ๋ฐฉ์์ผ๋ก์ ๋์ํ๋ค. tmp ๋ณ์๋ฅผ ์ค๊ฐ ๋งค๊ฐ๋ก ์ฃผ์๊ฐ(๊ฐ์ ์์น)์ ์๋ก ๊ตํํ๋ค.
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
Java์์ primitive type, reference type์ ํด๋นํ๋ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ์์ primitive type์ stack ์์ญ์ ์ ์ฅ๋๋ค
reference type์ ๊ทธ ๊ฐ์ฒด์ธ ๊ฐ์ด heap ์์ญ์ ์ ์ฅ๋๊ณ , stack ์์ญ์ ์๋ ๋ณ์๊ฐ ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ค.

๋ง์ฝ swap ๋ฉ์๋์์ reference ๋ณ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ๊ฒ ๋๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ก์ด ๋ณ์๊ฐ stack ์์ญ์ ์ ์๊ฐ ๋๋ค. ์๋กญ๊ฒ ๋ง๋ค์ด์ง ๋ณ์์ ์ฃผ์๊ฐ์ ์๋ก ๊ตํํ๊ฑฐ๋, ๊ฐ์ ๋ณ๊ฒฝํ๋ค๊ณ ํด์ ๊ธฐ์กด์ ๋ณ์๊ฐ์ด ๋ณํ์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Java๋ ํญ์ call by value(pass by value) ๋ฐฉ์์ผ๋ก ๋์ํ๋ค๊ณ ํ ์ ์๋ค.
๋ฉ์๋ ํธ์ถ ๋ฐฉ์ ๊ฐ๋
Call by value ๋ฐฉ์์ ๋ฉ์๋ ํธ์ถ ๋ฐฉ์์์ ๋ฉ์๋ ํธ์ถ์(caller)์ ํธ์ถ๋นํ๋ ์์ ์(callee)์ ํ๋ผ๋ฏธํฐ๋ ๋ณต์ฌ๋์ด์ ์๋ก ๋ค๋ฅธ ๋ณ์์ด๋ค. ๋ฐ๋ผ์ ์์ ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์์ ํด๋ ํธ์ถ์์ ๋ณ์๊ฐ ๋ฐ๋์ง ์๋๋ค.
call by reference ๋ฐฉ์์ ์ฐธ์กฐ(์ฃผ์)๋ฅผ ์ง์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ caller์ ๋ณ์์ callee์ ํ๋ผ๋ฏธํฐ๊ฐ ์์ ํ ๋์ผํ ๋ณ์์ด๋ค. ์์ ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์์ ํ๋ฉด ํธ์ถ์์ ๋ณ์๋ ๋ฐ๋๋ค.
์๋ฐ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ Reference type์ ์ด์ฉํด์ swap์ ๊ตฌํํด์ผํ์ง๋ง, primitive ๋ณ์ ๊ฐ์ ๊ตํํ๋ ํธ๋ฆญ๋ ์๋ค. Collections ํจํค์ง์์ list ๋ด์ ์์๊ฐ ๊ฐ์ swap ๋ฉ์๋๋ฅผ ์ง์ํ๋ค.
Last updated