본문 바로가기
Algorithm(코딩테스트)/코딩테스트 | 기초 개념 시리즈

[JAVA] JAVA는 Call by Value 방식만 사용한다.

by 카랑현석 2025. 2. 28.

결론

1. JAVA는 매개변수로 값을 넘길 때 항상 Call by value 방식으로 넘긴다.

2. 배열/객체를 만들어 값을 넘긴다면 그 주소값을 넘겨주기 때문에 마치 참조를 하는 것처럼 할 수 있다.

 

일반 자료형의 Call by Value

main 함수에서 swap(n,m) 으로 호출하여 n과 m을 변경하도록 함수를 호출하지만 swap 함수 내부에서 잠깐 변하고 변한 값이 main 함수에 영향을 미치지 않는다.

 

n 값이 넘어가는 과정에서 Integer a 로 받는데, 이 것은

새로운 변수를 선언하여 그 값인 2 값만을 전달하기 때문이다.

그리고 swap 함수가 끝나면 swap 함수에 있는 메모리들도 소멸되기 때문에 main 함수에서는 아무런 변화가 없는 것이다.

 

JAVA에서는 이렇게 매개변수로 값을 넘겨줄 때 무조건 값만 넘겨준다.

객체를 이용해서 주소값을 넘겨주자

배열과 객체도 마찬가지로 Call by Value 방식 즉, 매개변수로 값을 넘겨준다.

근데 객체는 그 값이 "주소값" 이기 때문에 마치 Call by Reference 처럼 참조를 할 수 있다고 착각할 수 있다.

 

값을 "주소값"으로 가지고 있는 것을 reference type 이라고 하고 배열과 객체가 이에 해당한다.


객체는 주소값을 가지고 있다.

JAVA에서는 항상 매개변수로 값을 넘겨줄 때 Call by Value 방식을 사용한다고 했으니까 이 경우에는 주소값을 넘겨주게 된다.

같은 주소값을 참조하여 main 에서도 swap 함수에서도 그 값을 동시에 공유할 수 있다.