- Pass by value(값에 의한 전달)
- 메서드 호출 시 값(실제 데이터)을 복사해서 전달 = 기본형 전달
- 호출된 메서드 내에서 전달받은 값을 변경해도 원래 데이터에는 영향이 없음
- Pass 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
class PassBeyTest{
int memberVar = 10;
public void change1(int var){ // 기본형 데이터를 전달 받음
var += 10;
System.out.println("change1 의 var : " + var);
}
public void change2(PassByTest reference){
// PassByTest 타입 인스턴스의 주소값인 참조형 데이터를 전달받음
reference.memberVar +=10; // 전달받은 참조형 주소값에 접근하여 데이터를 변경
System.out.println("change2 의 memberVar : " + reference.memberVar);
}
}
public class Ex3 {
public static void main(String[] args){
PassByTest pa = new PassByTest(); //pa 안에 PassByTest의 주소값 저장
System.out.println("PassByTest 인스턴트의 원본 데이터 : " + pa.memberVar); // 10
System.out.println("-----------------------------------");
//1. 메서드 파라미터로 기본형 변수를 전달했을 경우
System.out.println("chage1() 메서드 호출 전 meberVar : " + pa.memberVar); // 10
//PassByTest 인스턴스 멤버변수(기본형) 값을 chage1 메서드에 전달
pa.change1(pa.memberVar); // 기본형 변수값이므로 실제 데이터를 복사해서 전달 // 20
//호출된 메서드 내에서 전달받은 데이터(복사한 실제 데이터)를 변경하더라도
//원본 데이터에는 아무런 영향이 없다.
System.out.println("chage1() 메서드 호출 후 meberVar : " + pa.memberVar); // 10
//2. 메서드 파라미터로 참조형 변수를 전달했을 경우
System.out.println("chage2() 메서드 호출 전 meberVar : " + pa.memberVar);
//PassByTest 인스턴스 주소값(참조형)을 change2 메서드에 전달
pa.change2(pa);//참조형 변수값이므로 주소값을 복사해서 전달
// 호출된 메서드 내에서 전달받은 데이터(복사한 주소값)에 접근할 경우
//원본 데이터와 동일한 주소값에 접근하므로
// 한쪽에서 데이터를 변경하게 되면 원본 데이터에 그대로 적용되어
// 동일한 주소값을 참조하는 다른 변수에도 영향이 있다.
System.out.println("chage2() 메서드 호출 후 meberVar : " + pa.memberVar);
// = > change2() 메서드에서 인스턴스의 memberVar 값을 20으로 변경하면
// 현재 위치에서 pa 의 memberVar 값도 변경되어 있음
// => 변경된 곳의 인스턴스를 공유하므로 동일하게 적용을 받는다
}
}
|
cs |
'Language > Java' 카테고리의 다른 글
파라미터 생성자 (0) | 2020.05.28 |
---|---|
생성자(Constructor) (0) | 2020.05.28 |
접근제한자 (Access Modifier = 접근제어자) (0) | 2020.05.28 |
가변인자 (0) | 2020.05.27 |
메서드 오버로딩(Method Overloading) (0) | 2020.05.27 |