변수에 변수를 대입을 하면 어떻게 될까?

Daniel·2023년 11월 29일
0

Back-End

목록 보기
30/42

알고리즘을 공부하다 약간 헷갈리는 개념을 접해 정리해보고자 합니다.

문제의 코드

private static int partition(int[] A, int start, int end) {  
	
	...
	
	int pivot = A[start];  // 5
	
	...
	  
	int temp = pivot;  
	pivot = A[high];  // 3
	A[high] = temp;  
	  
	...
}
private static int partition(int[] A, int start, int end) {  
	
	...
	
	int pivot = A[start];  
	
	...
	  
	int temp = A[start];  
	A[start] = A[high];  
	A[high] = temp;  
	  
	...
}

위 두개의 차이점은 무엇일까요?

저번에 포스트로 정리 했던 https://velog.io/@dainel/Call-By-Value-Call-By-Reference 랑 연관이 있다고생각해 지난 포스트를 살펴보았는데
약간 설명이 빈약하고 위 케이스와는 좀 달라보여 다시한번 자료를 찾아보았습니다.

이해를 돕기위해 가상의 배열로 진행해보겠습니다.
A = 1, 2, 3, 4, 5 의 배열

첫번째 코드

  1. int pivot = A[0] : pivot에 A[start]의 값이 할당됩니다.
    • pivot = 1
  2. int temp = pivot : temp에 복사된 pivot의 값이 할당됩니다.
    • pivot = 1, temp = 1(복사된 pivot의 값)
  3. pivot = A[1] : pivot에 A[high]의 값이 할당됩니다.
    • pivot = 2, temp = 1(복사된 pivot의 값)
  4. A[1] = temp : A[1]에 temp의 값이 할당됩니다.
    • A[1] = 1

결과 : 1, 1, 3, 4, 5

두번째 코드

  1. int pivot = A[0] : pivot에 복사된 A[0]의 값이 할당됩니다.
    • pivot = 1(복사된 A[0]의 값)
  2. int temp = A[0] : temp에 복사된 A[0]의 값이 할당됩니다.
    • pivot = 1(복사된 A[0]의 값), temp = 1(복사된 A[0]의 값)
  3. A[0] = A[1] : A[0]에 복사된 A[1]의 값이 할당됩니다.
    • pivot = 1(복사된 A[0]의 값), temp = 1(복사된 A[0]의 값), A[0] = 2(복사된A[1]의 값)
  4. A[1] = temp : A[1]에 복사된 temp의 값이 할당됩니다.
    • pivot = 1(복사된 A[0]의 값), temp = 1(복사된 A[0]의 값), A[0] = 2(복사된A[1]의 값), A[1] = 1(복사된 temp의 값)

결과 : 2, 1, 3, 4, 5

위 결과 값이 다르게 나온걸 확인하실 수 있습니다.

이유는 무엇일까요?

자바는 기본데이터 타입이 인자로 전달되는 경우 Call by value(값에 의한 호출) 로 처리되기 때문인데요.
필자가 작성한 포스트의 주제에 부합하는 내용이였네요...정리해 놓고 잘 모르는것 같아 부끄럽네요.
이번기회를 통해 다시한번 배웠으니 이젠 위 개념에 대해 조금 더 알았다고 생각하겠습니다.

추가적인 개념이나 피드백있으시면 댓글 부탁드리겠습니다!

profile
응애 나 애기 개발자

0개의 댓글