본문 바로가기
Develop

[#JAVA] Call by value(값 객체), Call by reference(참조 객체) 차이점

by 코젼 2022. 7. 20.
728x90
반응형

💡함수 호출 방식

💁‍♀️JAVA는 함수에 전달되는 인자의 데이터 타입에 따라

기본 자료형 / 참조 자료형 함수 호출 방식이 달라집니다.

 

⭐JAVA가 C언어와 다른 점은, call by reference는 해당 객체의 주소값을 직접 넘기는게 아니다.

객체를 보는 또 다른 주소값을 만들어서 값을 넘긴다.

 

 call by value(값에 의한 호출)

 call by reference(참조에 의한 호출)


✏️ call by value

call by value는 인자로 받은 값을 복사하여 처리한다.
▪️ 기본 자료형
▪️ int, short, long, float, double, char, boolean

▪️ 복사된 인자는 함수 안에서 지역적으로 사용하는 변수이다.
▪️ 함수가 호출될 때, 메모리 공간 안에서 임시의 공간이 생성되고 함수가 종료되면 해당 공간은 사라진다.

▪️ 복사하여 처리하기 때문에 메모리 양이 늘어난다단점이 있다.
만약, 많은 계산이 들어간다면 과부하의 원인이 된다.
▪️ 그러나 복사하여 사용하기 때문에 원래의 값은 영향을 받지 않아서 안전한 장점이 있다. 

📃 swap 예제 - call by value

▪️ call by value이기 때문에 값이 바뀌지 않는다.
▪️ a, b는 기본 자료형의 변수이다.
public class SwapTest {
	public static void main(String[] args) {
		int a = 1;
		int b = 2;
		
		System.out.println(a + ", " + b);
		swap(a,b);
		System.out.println(a + ", " + b);
	}
	
	
	public static void swap(int a, int b) {
		int temp = a;
		a = b;
		b = temp;
	}
}


✏️ call by reference

인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다.
▪️ 참조 자료형
▪️ 
Array, Class Instance

▪️ 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성되고 함수가 종료되면 해당 공간은 사라진다.
▪️ 함수 안에서 인자의 값이 변경되면, 함수 호출시에 있던 변수들도 값이 바뀐다.


▪️ 직접 참조를 하기 때문에 원래 값이 영향을 받는 위험성이 있다는 단점이 있다.
▪️ 그러나 복사하지 않고 사용하기 때문에 직접 참조를 하기에는 빠르다장점이 있다.

📃 swap 예제 - call by reference

▪️ 메소드 호출을 할 때 새로운 reference를 만들어 호출하게 만든다.
▪️ swap 메소드에서도 해당 객체를 가르키지만 다른 reference 값으로 가르킨다.
public class SwapTest {
	int value;
	
	public static void main(String[] args) {
		SwapTest a = new SwapTest(1);
		SwapTest b = new SwapTest(2);
		
		System.out.println(a.value + ", " + b.value);
		swap(a,b);
		System.out.println(a.value + ", " + b.value);
	}
	
	public SwapTest(int value) {
		this.value = value;
	}
	
	public static void swap(SwapTest a, SwapTest b) {
		int temp = a.value;
		a.value = b.value;
		b.value = temp;
	}
}

▪️ 전역변수 value를 선언

▪️ main 메서드에서 SwapTest로 된 객체 a, b를 생성

 

▪️ swap 메서드의 매개변수는 SwapTest 객체인 a, b로 받는다.

▪️ 객체의 value에 직접 접근하여 값을 서로 바꾼다.


✨Reference

글 작성시 참고되었던 참고 블로그입니다!

감사합니다 😊😊

 

https://codingplus.tistory.com/29

 

'Call by value'와 'Call by reference'의 차이

함수 호출 방법은 크게 두가지가 있다. Call by value(값에 의한 호출) Call by reference(참조에 의한 호출) 이를 설명하기 위해, 많은 교재에서는 그림으로 예시를 들고 있다. 예를 들어, 컵에 물을 채워

codingplus.tistory.com

https://devlog-wjdrbs96.tistory.com/44

 

[JAVA] Call by Value 와 Call by reference 란 ?

C언어를 주로 공부 했던 나는 Call by value 와 Call by reference 에 대해서 call by value 는 값을 넘기는 거고 call by reference 는 포인터를 이용해서 주소를 넘긴다고 알고 있다. 하지만 누군가 나에게 이..

devlog-wjdrbs96.tistory.com

728x90
반응형

댓글