본문으로 바로가기

자바의 인자 전달 방식은 Call by value다.

category Back-End/Java 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가 끝나면서 사라지는 복사된 주소값일 뿐이다.

반응형