본문 바로가기
Language/Java

Pass by value & Pass by reference

by 태윤2 2020. 5. 28.
  • Pass by value(값에 의한 전달)
  1. 메서드 호출 시 값(실제 데이터)을 복사해서 전달 = 기본형 전달
  2. 호출된 메서드 내에서 전달받은 값을 변경해도 원래 데이터에는 영향이 없음
  • Pass by reference(참조에 의한 전달)
  1. 메서드 호출 시 참조값(주소)을 복사해서 전달 = 참조형 전달
  2. 호출된 메서드 내에서 전달받은 주소값에 접근하여 값을 변경하면 같은 주소를 참조하는 대상은 동일한 영향을 받는다
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