Language/Java

Java에서의 call by value, call by reference

SambaLim 2019. 2. 23. 23:07
Call by value, Call by Reference Java

Call by value

값에 의한 호출을 이야기하며 이 호출방식은 함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.

복사된 인자는 함수 안에서 지역적으로 사용된다. (Local Value)

함수내에서 인자의 값이 바뀔지라도외부 변수의 값은 변하지 않는다.

void func_value(int a) {
    int value1 = 20;
}

int main(void) {
    int value1 = 10;
    
    func_value(value1);
    System.out.println(value1);
    // 10
}

 

Call by reference in Java

Java는 항상 call by value이다. 하지만 call by reference처럼 보일 수 있는 방법이 있다.

public class CallByRef {
    public static void main(String[] args) {
        Person p = new Person("SungHo");
        System.out.println("p.name: " + p.name);
        // p.name: SungHo
        changeName(p);
        System.out.println("p.name: " + p.name);
        // p.name: ChanHo
    }
    
    public static void changeName(Person p) {
        p.name = "ChanHo";
    }
}

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

외부에 Person class를 만들어 changeName 메서드를 사용한 후에 p.name: ChanHo가 출력되도록 하였다.

Call by reference

call by reference를 지원하는 C++를 통해 call by reference를 알아보고자 한다.

#include <iostream>
using namespace std;

class Person
{ // C니까 한칸 띄워서 ㅎ...
	public :
	string name;
	
    Person (string name) {
    	this->name = name;
    }
}

void callByRef(Person *p)
{
    *p = Person("ChanHo");
}

void callByVal(Person p)
{
    p = Person("ChanHo");
}

int main()
{
    Person p("SungHo");
    callByVal(p);
    cout << "p.name: " << p,name << endl;
    // SungHo
    callByRef(&p);
    cout << "p.name: " << p.name << endl;
    // ChanHo
    return 0;
}

 

 

'Language > Java' 카테고리의 다른 글

Java serialVersionUID 사용이유  (0) 2019.03.09
Java String... 은 무엇인가?  (1) 2019.03.08
Java UUID 사용하기  (1) 2019.03.07
Java 오버로딩, 오버라이딩  (0) 2019.03.01
try-catch-finally의 기본형태와 return  (0) 2019.02.28