✔️ 값에 의한 호출 & 참조에 의한 호출
값에 의한 호출(Call by value)이란?
- 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달함
- 이때 복사된 인자를 함수 안에서 지역적으로 사용되기 때문에 local value 속성을 가지게 되므로
함수 안에서 인자 값이 변경되더라도 외부 변수 값은 변경되지 않음 - 자바는 생성한 변수마다 새로운 메모리 공간을 가지지만
그 메모리 공간에 값 자체를 저장하는 것이 아니라 값을 다른 메모리 공간에 할당하고 이 주소 값을 저장하게 됨 - 그러므로 자바는 항상 값에 의한 호출로 값을 넘기게 되므로
따라서 원본 객체의 프로퍼티까지는 접근이 가능하나, 원본 객체 자체를 변경할 수는 없음- 기본 자료형을 넘길 시에는 해당하는 변수의 값을 복사해서 전달하게 됨
- 참조 자료형을 넘길 시에는 해당 객체의 주소 값을 복사하여 이를 가지고 사용하게 됨
- 하지만 인자를 넘겨줄 때마다 메모리 공간을 할당해야하므로 메모리 공간을 더 잡아먹게 됨
참조에 의한 호출(Call by reference)이란?
- 함수 호출 시 인자로 전달되되는 변수의 레퍼런스를 전달함
- 따라서 함수 안에서 인자 값이 변경되면 인자로 전달된 객체의 값도 변경되게 됨
- C/C++은 생성한 변수마다 새로운 메모리 공간을 할당하고 이에 값을 덮어씌우는 형식으로 값을 할당한 후
포인터를 사용하여 같은 주소값을 가리키도록 할 수 있음
따라서 주소 값 자체를 인자로 넘겼을 때 값을 변경하면 새로운 값으로 덮어 쓰여 기존 값이 변경되게 됨
'Tech Interview > Language' 카테고리의 다른 글
[Language] 클래스 & 객체 & 인스턴스 (0) | 2024.03.12 |
---|---|
[Language] ==와 equals() (0) | 2024.03.12 |
[Language] Java의 데이터 타입 (0) | 2024.03.06 |
[Language] 객체 지향 프로그래밍 (0) | 2024.03.06 |
[Language] 가비지 컬렉션 (0) | 2024.03.05 |