Call By Value & Call By Reference
ν¨μκ° μΈμλ‘ λ°μ κ°μ μ²λ¦¬νλ 맀컀λμ¦μ κ΄ν κ°λ μ λλ€.

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 λ°©μμΌλ‘ μ€μ λ©λͺ¨λ¦¬ κ°μ μ°Έμ‘° νμ¬ ν λ©λͺ¨λ¦¬μ μ μ₯νκ³ μ΄ κ°μ 볡μ¬νμ¬ μ¬μ©νλ€κ³ κ²°λ‘ λΌ μ μμ΅λλ€.