Java๋ ์ธ์๋ก ๋๊ฒจ์ค ๊ฐ์ฒด์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ํด๋น ๊ฐ์ฒด์ ์ค์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
add ํจ์๋ ์ธ์๋ก ๋ฐ๋ model ๊ฐ์ฒด ์์ number ํ๋์ ๊ฐ์ 1 ๋ํ๋ ํจ์์ด๋ค.
์ฒ์์ ์๋ model ๊ฐ์ฒด๋ฅผ add ํจ์์ ์ธ์๋ก ๋๊ฒจ์ ์คํํ๋ฉด ์ฒ์ model์ ํ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
C์ธ์ด๋ python์์ ํจ์์ ์ธ์๋ฅผ ๋๊ธฐ๋ฉด ์ค์ ๊ฐ(ํน์ ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ)์ด ์๋ ์ธ์์ ๊ฐ์ ๋ณต์ฌ ๊ฐ์ด ๋์ด๊ฐ๋ค.
์ด๋ ๊ฒ ์๋ณธ์ ๋ณต์ฌ ๊ฐ์ ์ธ์์ ๋๊ฒจ์ฃผ๋ ๋ฐฉ๋ฒ์ "Call By Value"๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ค์ ๋ก ์๋ณธ A๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ addํจ์์ return ๊ฐ์ธ B ๋ค์ ๋์ ํด์ค ์ ์๋ค.
Model model = new Model()
model = add(model) // add ํจ์์ return์ Model classโ
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๋ถํธํ ์ ์ด ๋ง๋ค.
๋ง์ฝ, add ํจ์์ ์ญํ ์ด model์ number ํ๋ ๊ฐ์ ํน์ ๊ฐ์ ๋ํ ํ "ok"๋ผ๋ ๋ฌธ์์ด์ ๋ฆฌํดํด์ผ ํ๋ค๋ฉด ์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง, java์์ ์ฝ๋๋ฅผ ์ง ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ์ธ์๋ก ๋ฐ์ ๊ฐ์ฒด์ ๊ฐ์ ์์ ํ๋ฉด ์๋ณธ์ ๊ฐ๋ ๋ณ๊ฒฝ์ด ๋๋ค.
๐ ๊ทธ๋ ๋ค๋ฉด java๋ ์ฐธ์กฐ ๊ฐ์ ์ง์ ํธ์ถํ๋ "Call By Reference" ๋ฐฉ์์ ์ง์ํ๋ ๊ฒ์ธ๊ฐ?
๊ทธ๋ ์ง ์๋ค๊ณ ํ๋ค.
java๋ ๊ธฐ๋ณธ์ ์ผ๋ก call by value ๋ฐฉ์์ ์ง์ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ ์๋ณธ์ ๊ฐ์ด ๋ณํ ๊น?
java๋ ์ธ์๋ฅผ ๋๊ฒจ์ค ๋, ํด๋น ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ์ ๋ณต์ฌ ๊ฐ์ ๋๊ฒจ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๊ทธ๋ฆผ์ ์์๋ก ๋ค๋ฉด ์๋ณธ A ์ญ์ ์ค์ model ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๋ณ์์ด๋ค.
A๋ฅผ addํจ์์ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ฉด B๋ผ๋ ๋ณ์์ A๊ฐ์ ๋ณต์ฌ ๊ฐ์ ๋ด๊ณ B๊ฐ์ ํจ์์ ์ธ์๋ก ์ฌ์ฉํ๊ฒ ๋๋ค.
์ด๋, B๋ฅผ ํตํด ํ๋ ๊ฐ์ ์ ๊ทผํ๋ฉด A์ ๋์ผํ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์ค์ model ๊ฐ์ฒด์ ํ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
์ฌ๋ฌ ์ธ์ด๋ฅผ ์์ด์ ์ฌ์ฉํ๋ค ๋ณด๋ ๋ฌธ๋ ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌํ๋ฉด์ ๊ธฐ์ต์ ๋ ์ค๋ ๋จ์์ผ๋ฉด ์ข๊ฒ ๋ค.
์กฐ๊ธ ๋ ์์ธํ ๋ด์ฉ์ด ํ์ํ๋ฉด ์๋ ๊ธ์ ์ฐธ๊ณ ํ์๋ฉด ์ข๊ฒ ์ต๋๋ค.
์์ฃผ ์ ์ ๋ฆฌํด์ฃผ์ ์ ๋ง์ ๋์์ด ๋์์ต๋๋ค^^.