Java ! Call By Value ? Call By Reference ?

OH JU HYEON·2023년 10월 1일
1

Java

목록 보기
6/6

Java ! Call By Value ? Call By Reference ?

1. Call By Value & Call By Reference

메서드를 호출할 때 인자를 넘겨주는 방법을 말한다.

1-1. Call By Value

값에 의한 호출이라고 한다. 값을 메모리에서 복사해서 사용하기 때문에 원래의 값이 보존되지만 복사하는 만큼 다른 메모리를 사용하기 때문에 메모리 사용량이 늘어나게 된다.

1-2. Call By Reference

참조에 의한 호출이라고 한다. 값을 복사하지 않고 직접 참조하는데 메모리에서 복사하는 과정이 없기 때문에 빠르고 Call By Value 보다 메모리를 덜 사용한다. 하지만 직접 참조하는 만큼 원래 값이 영향을 받는 단점이 있다.

2. Java

Java는 Pointer가 없기 때문에 기본적으로 Call By Value이다. 하지만 Java의 자료형은 원시 자료형과 참조 자료형이 있기 때문에 헷갈릴 수 있다. 관련 내용을 찾아 볼 때 이 부분 때문에 많이 헷갈렸는데 결론을 먼저 말 하자면 Call By Value이다. 참조 자료형 타입을 사용할 때도 말이다.

2-1. 원시 자료형 : Primitive Type

기본적으로 스택 영역에 생성이되고 int long float double와 같은 자료형을 말한다. 원시 자료형은 Call By Value로 동작하게 된다.

2-2. 참조 자료형 : Reference Type

스택 영역에 생성되지만 힙 영역에 있는 메모리를 가리키고 있다. 이 부분이 헷갈리는 부분인데 힙 영역에서 메모리 주소 값을 전달해서 Call By Reference로 보일 수 있지만 정확히는 주소 값 자체를 복사해서 전달하는 것이지, 그 자체를 전달하는 게 아니기 때문에 Call By Reference가 아니게 된다. 때문에 결과적으로 참조 자료형 마찬가지로 Call By Value로 동작한다고 볼 수 있다.

profile
읽기만 해도 이해가 되는 글을 쓰기 위해 노력합니다.

0개의 댓글