참조 변수의 복사

turtle601·2021년 4월 8일
1

CallByValue(값에 의한 호출)

기본 자료형 변수를 복사하는 경우 Call By Value(값에 의한 호출)에 이해 그 값이 복사되며 두 개의 변수는 서로에게 영향을 주지 않는다.

예) Call By Value

package reference;

public class CallByValue{
	public static void main(String args[]){
    	int a = 10;
        int b = a;
        
        b = 20;
        
        System.out.println(a); // 10
        System.out.println(b); // 20
    }
}

위의 코드를 보면 a와 b는 아무런 관련이 없다는 것을 알 수 있다.

Call By Reference(참조에 의한 호출)

그렇다면 기본 자료형이 아닌 객체를 저장하고 있는 객체 참조 변수를 복사하는 경우는 어떨까???

이 경우를 흔히 Call By Reference(참조에 의한 호출)이라고 설명한다.

예) Call By Reference

package reference;

public class CallByReference{
	public static void main(String[] args){
    	Animal ref_a = new Animal();
        Animal ref_b = ref_a;
        
        ref_a.age = 10;
        ref_b.age = 20;
        
        System.out.println(ref_a.age); // 20
        System.out.println(ref_b.age); // 20
        
    }
}   

class Animal{
	public int age;
}   

Call by Values(값에 의한 호출)의 경우 기본 자료형 변수는 저장하고 있는 값을 그 값 자체로 해석하는 반면,

Call by Reference(참조에 의한 호출)의 경우 객체 참조 변수는 저장하고 있는 값을 주소로 해석한다는 차이가 있을 뿐이다.

T메모리

Call by Values, Call by Reference의 예시 코드를 T메모리로 분석하면 좀 더 쉽게 이해할 수 있다.

  1. Call by Values
  • CallByValue.java의 8번째 줄 실행 전
  • CallByValue.java의 8번째 줄 실행 후
  1. Call by Reference
  • CallbyReference.java의 9번째 줄 실행 전
  • CallbyReference.java의 9번째 줄 실행 후

따라서 Call by Values, Call by Reference를 비교해 보면 결국 변수가 가진 값이 그대로 복사된다는 것은 같지만 그 값을 값 자체로 해석하느냐 아니면 주소값으로 해석하느냐의 차이가 있다는 것을 알 수 있다.

profile
Programmer

0개의 댓글