자바 기본형 매개변수, 참조형 매개변수, 참조형 반환타입에 대해서 알아보자.
메소드를 호출할 때 매개변수로 지정한 값을 메소드의 매개변수에 복사해서 넘겨준다. 매개변수의 타입에는 기본형 매개변수와 참조형 매개변수가 있다.
기본형 매개변수
매개변수의 타입이 기본형(primitive type)일 때는 기본형 값이 복사된다. 변수의 값을 읽기만 할 수 있다.(read only)
vm.change메소드가 호출되면서 x가 change메소드의 매개변수 x에 복사된다. change 메소드에서는 x를 1033으로 변경한다. change메소드가 종료되면서 1033으로 변경된 매개변수 x는 스택에서 제거되므로 해당 메소드를 호출 후에도 x의 값은 8인걸 볼 수 있다.
즉, 원본이 아닌 복사본이 변경된 것이라 원본에는 아무런 영향을 미치지 못한다. 이처럼 기본형 매개변수는 변수에 저장된 값만 읽을 수만 있을 뿐 변경할 수 는 없다.
참조형 매개변수
매개변수의 타입이 참조형(reference type)일 때는 변수의 값을 읽고 변경할 수 있다.(read&write)
change메소드의 매개변수가 참조형이라서 값이 아니라 값이 저장된 주소를 change메소드에 넘겨주었기 때문에 값을 읽어오는 것 뿐만 아니라 변경하는 것도 가능하다.
change메소드가 호출되면서 참조변수 d의 값(주소)이 매개변수 d에 복사된다. 이제 매개변수 d에 저장된 주소 값으로 x에 접근이 가능하다. change메소드에서 매개변수 d로 객체 d의 x 값을 100으로 변경한다. change메소드가 종료되면서 매개변수 d는 스택에서 제거되지만 d.x의 값은 값이 바뀐 100이다.
추가로 매개변수가 배열이어도 참조형 매개변수이다.
참조형 반환타입
매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있다. 반환타입이 참조형이라는 것은 반환하는 값의 타입이 참조형이라는 얘기이다. 모든 참조형 타입의 값은 객체의 주소이므로 정수값이 반환된다.
copy메소드는 새로운 객체를 생성한 다음에, 매개변수로 넘겨받은 객체에 저장된 값을 복사해서 반환한다. 반환하는 값이 Data객체의 주소이므로 반환 타입이 Data(=클래스명)이다.