오늘은 C언어에서 call by value와 call by reference와 같은 개념을 자바에서 배워보도록 하겠습니다.
<call by value>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package sec02_exam;
public class PrimitiveParamEx {
//c언어에서 call by value를 의미. 호출한 곳에 전혀 영향을 끼치지 않는다.
public static void main(String[] args) {
Data d = new Data();
d.x=10;
System.out.println("main(): x = " + d.x);
PrimitiveParamEx.change(d.x);//값에 의한 복사
System.out.println("change(d.x) 메서드 호출 후 ");
System.out.println("main(): x = " + d.x);
}
public static void change(int x) {
x = 1000;
System.out.println("change(): x = " + x);
return;
}
static class Data{
int x;
}
}
|
cs |
여기서 d.x 에 10을 대입하고
change(d.x)를 호출 했습니다.
이떄 change안에 x는 지역변수로 1000이 대입되고 있기 떄문에
메서드 내에서만 1000이라는 값을 가지고 메서드가 끝나면 값이 다시 d.x의 원래 값인 10이 됩니다.
호출한 곳에 전혀 영향을 끼치지 않는 것입니다.
<실행결과>
<call by reference>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package sec02_exam;
public class ReferenceParamEx {
//c언어에서 call by reference를 의미.
public static void main(String[] args) {
Data d = new Data();
d.x=10;
System.out.println("main(): x = " + d.x);
ReferenceParamEx.change(d);//주소에 의한 복사
System.out.println("change(d.x) 메서드 호출 후 ");
System.out.println("main(): x = " + d.x);
}
public static void change(Data d) {
d.x = 1000;
System.out.println("change(): x = " + d.x);
return;
}
static class Data{
int x;
}
}
|
cs |
이번에는 call by reference입니다.
주소에 의해서 값이 변하기 때문에
위와 다르게 값이 변합니다.
동일하게 d.x =10을 대입하구요
그다음에는 change메서드를 호출하는데
값 자체를 매개변수로 넣어서 호출하는 것이 아니라 Data클래스의 객체 d를 넣고 있습니다.
그러니까 주소를 넣고 있는 것이죠.
그래서 그 주소에 있는 값을 change메서드에서 바꿨으니 당연히 원래 객체에서 값이 바뀌게 되어있습니다.
<출력결과>
728x90
'JAVA > java 이론' 카테고리의 다른 글
[자바JAVA] 메서드 오버로딩 overloading (0) | 2020.10.10 |
---|---|
[자바JAVA] 재귀호출, 팩토리얼 (0) | 2020.10.09 |
[자바JAVA]JVM의 메모리구조- 호출스택 (0) | 2020.10.08 |
[자바JAVA] 객체지향개념2 - 변수와 메서드. 클래스변수. 인스턴스 변수. 지역변수. static메서드. 인스턴스 메서드 (0) | 2020.10.08 |
[자바JAVA] 객체지향개념1 - 클래스와 객체, 클래스 접근 제어자, 메서드 구성 (0) | 2020.10.07 |