• Home
  • About Me
    • Dev_Sseon photo

      Dev_Sseon

      Spring으로 시작해서 Javascript에 정착하기까지 정리를 해놓은 나만의 블로그.

    • Learn More
    • Email
    • Facebook
    • Github
    • Youtube
  • Posts
    • All Posts
    • ├ OS(운영체제)
    • ├ Network(준비중)
    • ├ Browser
    • ├ JavaScript
    • ├ ECMAScript6
    • ├ Jquery
    • ├ Angular
    • ├ Spring
    • └ Git
    • All Tags
  • Projects

Java Call by Value와 Call by Reference

30 May 2018

Reading time ~1 minute

  • Call by Value와 Call by Reference의 차이

all by Value (값에 의한 호출)

  • Call by Value는 가장 일반적인 함수 호출형태로 값을 복사하는 것 이다.

void swap(int a, int b) { 
    int temp = a;
    a = b;
    b = temp;
}

int a1 = 10; 
int a2 = 20;
swap(a1, a2); 
cout << "a1: " << a1 << " a2: " << a2 << endl;



Call by Reference (참조의 의한 호출)

  • 간단하게 한줄로 요약하자면 변수의 주소를 전달하는 것 이다.

void swap(int *a, int *b) { 
    int temp = *a;
    *a = *b;
    *b = temp;
} 

int a1 = 10; 
int a2 = 20;
swap(&a1, &a2); //주소값을 넘김
cout << "a1: " << a1 << " a2: " << a2 << endl;



java는 call by reference가 아니다.

  • 결론부터 말하자면 java는 항상 call by value이다. 흔히 java의 오해를 살 수 있는 부분을 살펴보자.



public class CallByValue { 
    public static void main(String[] args) {
        Person p = new Person("wonwoo");
        System.out.println("p.name: " + p.name);
        callByValue(p);
        System.out.println("p.name: " + p.name);
    } 
    public static void callByValue(Person p) {
        p.name = "kevin";
    }
} 

class Person {
    String name; 
    public Person(String name) { 
        this.name = name;
    }
}


위의 내용을 call by value로



public class CallByValue { 
    public static void main(String[] args) {
        Person p = new Person("wonwoo");
        System.out.println("p.name: " + p.name);
        callByValue(p);
        System.out.println("p.name: " + p.name);
    }
    public static void callByValue(Person p) {
        p = new Person("kevin");
    }
} 

class Person {
    String name; 
    public Person(String name) { 
        this.name = name;
    }
}


위에서 내용이 call by reference에 의한 변경이다 이게 되야 call by reference라는 것이다.



springjavaextendsCall by ValueCall by Reference Share Tweet +1