Call by Value : 값에 의한 호출
- 예제
결과는 num에 100이 더해져 100, 200이 나올 것 같지만 100, 100이 나온다.
Call by Value는 메모리에 저장되어 있는 값(Value)을 복사하여 메서드 parameter로 넘어간다.
메인 메서드의 num과 change메서드의 지역변수(num)는 서로 다른 메모리 주소에 담기기 때문에 메서드 호출 후에도 값이 변하지 않게 된다.
결과는 100, 200이 나온다.
Call by Value를 통해 값의 변화가 있게 하려면 메서드에서 값을 리턴하고 리턴된 값을 변수에 담아주어야 한다.
메모리 주소값을 공유하지 않기 때문에 변경된 값을 출력하려는 변수에 넣어 주어야 한다.
Call by Reference: 주소 값에 의한 호출
- 예제
결과는 10 , 300이 나온다.
Call by reference는 값(Value)가 아닌 메모리의 주소 값(Address)을 메서드 parameter로 넘겨주게 되고 주소 값을 참조하여 연산하기 때문에 값의 변화가 생기게 된다.
결론 : Call by Value, Call by Reference 무엇을 사용해야 할까??
- Call by Value는 값을 복사해서 사용하기 때문에 원본 데이터 훼손의 문제가 발생하지는 않지만 값을 넘길 때마다 메모리 공간이 할당된다는 단점을 가진다.
- 반대로 Call by Reference의 경우 주소값 참조로 메모리 할당에 대한 문제는 없지만 원본 데이터의 값을 훼손시킬 수 있는 단점을 가진다.
- 따라서 상황에 따라 적절히 선택하여 사용하면 될 것으로 생각한다.
'Java' 카테고리의 다른 글
[Java] 배열의 정렬(sort) 정리 (0) | 2020.07.11 |
---|---|
[Java] 배열(Array) 정리 (0) | 2020.07.10 |
[Java] 메서드 정리 (0) | 2020.07.10 |
[Java] 반복문(while, do-while, for) 정리 (0) | 2020.07.10 |
[Java] 조건문 (if, switch) 정리 (0) | 2020.07.10 |