Call

์ž๋ฐ”๋Š” call by value์™€ call by reference ์ค‘ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • ์ž๋ฐ”๋Š” call by value์ด๋‹ค.

  • ์ž๋ฐ”๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์ด๋“  ์ฐธ์กฐ๊ฐ’์ด๋“  ๊ฐ’์„ ํ•ญ์ƒ ๋ณต์‚ฌํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค.

  • ์ƒˆ๋กœ์šด ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋˜๋ฉด ํ•ด๋‹น ์Šคํƒ ํ”„๋ ˆ์ž„์—๋Š” ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ธด ์ฐธ์กฐ๊ฐ’์„ ํž™ ์˜์—ญ์—์„œ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•ด ์ฐธ์กฐํ•œ๋‹ค.

  • ๋•Œ๋ฌธ์— ๊ธฐ์กด ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ์›๋ž˜์˜ ๊ฐ’์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

  • ๊ฐ์ฒด์˜ ๋‚ด์šฉ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’ ์ž์ฒด๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

call by value์™€ call by reference ์˜ ์ฐจ์ด ์˜ˆ์‹œ๋ฅผ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ณด์—ฌ์ฃผ์„ธ์š”.

public class Main {
    public static void main(String[] args) {
        int value = 5;
        callByValue(value);
        System.out.println("value = " + value); //value = 5

        int[] ref = {5};
        callByRef(ref);
        System.out.println("ref[0] = " + ref[0]); //ref[0] = 6

    }
    private static void callByValue(int value) {
        value++;
    }

    private static void callByRef(int[] ref) {
        ref[0]++;
    }
}
  • call by value ๋Š” ์ธ์ž๋กœ ๋ฐ›์€ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด๊ฐ’ value์—๋Š” ์•„๋ฌด ์˜ํ–ฅ์ด ์—†๋‹ค.

  • call by reference ๋Š” ์ธ์ž๋กœ ๋ฐ›์€ ๊ฐ’์˜ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์ฐธ์กฐ ref์—๋„ ์˜ํ–ฅ์ด ์žˆ๋‹ค.

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person(10);
        //์Šคํƒ: p1  =>  ํž™: x001, age=10
        System.out.println("before : " + p1.age); //10

        addAge(p1);
        //์Šคํƒ: p1  =>  ํž™: x001, age=11
        System.out.println("after1 : " + p1.age); //11

        changePerson(p1);
        //์Šคํƒ: p1  =>  ํž™: x001, age=11
        System.out.println("after2 : " + p1.age); //11

    }

    private static void changePerson(Person p1) {
        p1 = new Person(30);
        //์Šคํƒ: p1  =>  ํž™: x002, age = 30
        //๋ฉ”์„œ๋“œ๊ฐ€ ๋๋‚˜๊ณ  ์Šคํƒ ํ”„๋ ˆ์ž„์—์„œ ์ œ๊ฑฐ๋˜๋ฉด p1์ด ์ฐธ์กฐํ•˜๋Š” x002๋Š” GC ๋Œ€์ƒ
        //์ฐธ์กฐ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— main์˜ x001์€ ๊ทธ๋Œ€๋กœ
    }

    private static void addAge(Person p1) {
        p1.age++;
    }

    static class Person{
        int age;

        public Person(int age) {
            this.age = age;
        }
    }
}

์ฐธ๊ณ 

Last updated