ํจ์๊ฐ ์ธ์๋ก ๋ฐ์ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋งค์ปค๋์ฆ์ ๊ดํ ๊ฐ๋ ์ ๋๋ค.

Call By Value
ํจ์๊ฐ ํน์ ์๋ฃํ์ ์ธ์๋ก ๋ฐ์ ๊ฐ์ ๋ณต์ฌ ํด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์
๋๋ค.
๊ธฐ๋ณธ ์๋ฃํ: Boolean Type, Numberic Type
์ฐธ์กฐ ์๋ฃํ: Class Type, Array Type ๋ฑ ๊ธฐ๋ณธ ์๋ฃํ ์ด์ธ์ ์๋ฃํ
๊ธฐ๋ณธ ์๋ฃํ์ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์๋์ ๊ฐ์ด Call By Value๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
plus๋ผ๋ ๋ฉ์๋ ( ํจ์ ) ์์ num ์ด๋ผ๋ ์ธ์์ 9๋ฅผ ๋ํด๋ ์๋ณธ ๊ฐ์ 1๋ก ๋ณํจ์ด ์๋ ๋ชจ์ต์ ๋ณด์ ๋๋ค.
public class main
{
public static void main(String[] args)
{
int num = 1;
System.out.prinfln(plus(num)); // 10
System.out.prinfln(num); // 1
}
static void plus(int num) {
num += 9
return num;
}
}
์ผ๋ถ ์ธ์ด์์๋ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ๊ฐ์ ํ ( Heap )์ ์ ์ฅํ๊ณ ๊ฐ๋ฐ์๊ฐ ํ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ํํ๋ฅผ ์ทจํ๊ณ ์์ต๋๋ค.
ํนํ ์๋ฐ(Java)์ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด์์๋ ํ(heap)์ด๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํด ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
ํ์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํ ๊ณต๊ฐ์ผ๋ก, ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๊ฐ์ฒด์ ํฌ๊ธฐ์ ์์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํ๋ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ํ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ๊ฐ์ฒด์ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ '์ฐธ์กฐ ๊ฐ'์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฐ์์ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด
์ด ๊ฐ์ฒด๋ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ณ , ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ๊ฐ์ด ์์ฑ๋ฉ๋๋ค.
์ด ์ฐธ์กฐ ๊ฐ์ ํตํด ๊ฐ๋ฐ์๋ ํด๋น ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ค์ํ ์ ์, ์๋ฐ์ ๊ฐ์ ์ธ์ด์์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค.
๋์ , ์์ ํ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ์ฐธ์กฐ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ง์ ๋ํ๋ด์ง ์๊ณ , ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ํ ์ถ์์ ์ธ ์๋จ์ ์ ๊ณตํฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์ ๋๋ฌธ์ ์๋ฐ์์๋ call by value / call by address ๋๊ฐ์ง๋ก ๋ค์ ๋๋๊ธฐ๋ ํฉ๋๋ค.
๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํ ๊ฒ ์ด๊ธฐ ๋๋ฌธ์ call by reference์ call by value์ ์ค๊ฐ ์ง์ ๊ทธ ์ด๋๊ฐ ๋ผ๊ณ ์๊ฐ ํ ์ ๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Call By Reference
์์์ ๋งํ call by value์๋ ๋ค๋ฅด๊ฒ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฅดํค๋ ์ฃผ์๊ฐ์ ๋ณต์ฌํด์ ํจ์์ ์ ๋ฌํ๋ ๋ฐฉ์์ ๋๋ค.
public class Main {
public static void main(String[] args) {
int[] num = {1};
plus(num);
System.out.println(num[0]); // 10
}
static void plus(int[] num) {
num[0] += 9;
}
}
๋ํ์ ์ธ ์ฐธ์กฐ ํ์ Array๋ ํจ์์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์ค์ ๊ฐ๋ ๋ณ๊ฒฝ ๋ฉ๋๋ค.
int[] num = {1};
๋ฐฐ์ด int[] num์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค. ์ด ๋, num ๋ณ์๋ ํ์ ์ ์ฅ๋ ๋ฐฐ์ด์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
ํ์ ์ ์ฅ๋ ๋ฐฐ์ด์ ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ฐธ์กฐ๊ฐ์ ๋๋ค.
์ฆ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ด๋๊ฐ์ num์ ๋ํ ๊ฐ์ด ์ ์ฅ์ ๋์ด์๊ณ ํ ๋ฉ๋ชจ๋ฆฌ์์๋ ์ด ์์น์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , JAVA ์์๋ ์ด ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํ์ฌ ์ฌ์ฉํ๋ ํํ์ธ ๊ฒ์ ๋๋ค.
ํ ๋ฉ๋ชจ๋ฆฌ ๋ผ๋ ๊ณต๊ฐ์์ ์ด ๋ณ์๋ค์ ๊ด๋ฆฌํ๊ณ ๊ฐ๋ฐ์๋ num์ ๋ณ๊ฒฝํ๋ฉด ํ ๋ฉ๋ชจ๋ฆฌ์ ์ฐธ์กฐ๊ฐ์ ๋ฐ๋ผ ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์ ์ผ๋ก ๋๋ง ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ call by reference ๊ด๊ณ๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ JAVA๋ call by value๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ฉฐ, call by reference ๋ฐฉ์์ผ๋ก ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์ฐธ์กฐ ํ์ฌ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์ด ๊ฐ์ ๋ณต์ฌํ์ฌ ์ฌ์ฉํ๋ค๊ณ ๊ฒฐ๋ก ๋ผ ์ ์์ต๋๋ค.
'๐ป Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์์ฒด์ (0) | 2024.04.05 |
---|---|
Spring (0) | 2024.04.05 |