Jin's Dev Story

[JAVA] Call By Value와 Call By Reference 본문

Programming Language/JAVA

[JAVA] Call By Value와 Call By Reference

woojin._. 2023. 8. 15. 16:57

Call By Value

  • 인자로 받은 값을 복사하여 처리하는 방식
  • Call By Value에 의해 넘어온 값을 증가 시켜도 원래의 값이 보존됨
  • 값을 복사하여 넘기기 때문에 메모리 사용량이 늘어남

Call By Reference

  • 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는 방식
  • 값을 복사하지 않고 직접 참조하기 때문에 속도가 빠름
  • 원래의 값에 영향을 주는 리스크가 존재함
  public class Main {

       public static void main(String[] args) {
            Foo f = new Foo("f");
                      System.out.println(f.string);
            changeReference(f); // It won't change the reference!
            modifyReference(f); // It will modify the object that the reference variable "f" refers to!
                  System.out.println(f.string);
  }

          // 값에 의한 호출
       public static void changeReference(Foo a) {
            Foo b = new Foo("b");
                      System.out.println(b.string);
            a = b;
                      System.out.println(a.string);
       }

          // 주소에 의한 호출
       public static void modifyReference(Foo c) {
            c.setAttribute("c");
                      System.out.println(c.string);
       }

  }


  // f
  // b
  // b
  // c
  // c