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 |