Back-End/Java
자바의 인자 전달 방식은 Call by value다.
@deveely
2018. 9. 17. 22:16
반응형
자바에서는 인자를 전달할 때 값을 전달한다.
예를들어
public void methodA(SomeClass param) {
param = new SomeClass();
}
public static void main(String[] args) {
SomeClass instance = new SomeClass();
methodA(instance);
}
위와 같은 상황이 있다고 가정하고 결론부터 얘기하면
methodA를 실행한다고해서 main에 있는 instance에 새로운 SomeClass객체가 할당되지 않는다.
methodA에 인자로 전달된 param은 분명 메인에 instance의 주소값을 가지고 있고,
그 주소값을 통해 instance객체에 대한 제어를 할 수 있는 것은 분명한 사실이다.
하지만 param에 new 키워드를 통해 새로운 객체를 할당하는 것은 조금 다르다.
param과 instance는 실제로 같은 주소값을 갖고 있지만
더 정확하게 얘기하면
param은 instance의 실제 객체의 주소값이 복사되어 전달된 복사본을 갖고 있다.
때문에, param과 instance는 특정 주소에 있는 객체에 대해 똑같이 제어할 수 있지만
param에 새로운 객체(주소값)을 할당하는 것은 그저 복사본에 할당하는 것일뿐이고
main에 있는 instance는 전혀 영향을 받지 않는 것이다.
param은 그저 methodA가 끝나면서 사라지는 복사된 주소값일 뿐이다.
반응형