ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [java] call by value vs call by reference
    java 2023. 1. 16. 18:10

    메소드에 값(primitive type)을 전달하는것 과 객체(reference type)을 전달하는 것에는 큰차이가 있다.

     

    call by value : 메소드가 값을 받은 경우

    value는 메소드 내부에서만 쓰인다. 즉 객체 내부 속성값이 copy된 복사본이다. 이는 본래객체의 속성값을 변경시키지 못함

    변경시키고자한다면 return 값 을 해주어야함.

    class Updator{
        void update(int count){
            count++; //값은 매개변수 내부에서만 쓰인다.
        }
    }
    class Counter{
        int count =0;
    }
    
    public class Sample {
        public static void main(String[] args) {
            Counter myCounter = new Counter();
            System.out.println(myCounter.count); //0
            Updator myUpdator = new Updator();
            myUpdator.update(myCounter.count); //value값을 매개변수 인자로 넣었다.
            System.out.println(myCounter.count);//0
    
        }
    }
    
    

    call by reference : 메소드가 객체를 받은 경우

    메소드의 입력으로 객체를 받은 경우는 메소드가 입력받은 객체를 그대로 사용

    메소드가 객체의 속성값을 변경하면 메소드 수행 후에도 객체의 변경된 속성값이 유지됨.

    class Updator{
        void update(Counter counter){
            counter.count++; //객체를 전달받았기때문에 객체의 속성값을 변경할수있다.
        }
    }
    class Counter{
        int count =0;
    }
    
    public class Sample {
        public static void main(String[] args) {
            Counter myCounter = new Counter();
            System.out.println(myCounter.count); //0
            Updator myUpdator = new Updator();
            myUpdator.update(myCounter); //reference값을 매개변수 인자로 넣었다.
            System.out.println(myCounter.count);//1
    
        }
    }
    
    

     

     

    https://wikidocs.net/book/31

    'java' 카테고리의 다른 글

    [java] 생성자(Constructor)  (0) 2023.01.17
    [java] 상속  (0) 2023.01.16
    [java] 메소드  (0) 2023.01.16
    [java] 클래스  (0) 2023.01.16
    [java] 제어문(if,switch,while,for)  (0) 2023.01.16

    댓글

lee-ding