본문 바로가기

Java/Basic

[Java] 기본형 매개변수, 참조형 매개변수 + 참조형 반환타입

기본형 매개변수와 참조형 매개변수

- 자바에서는 메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개변수에 복사해서 넘겨준다.

- 매개변수의 타입이 기본형(primitive type)일 때는 기본형 값이 복사되겠지만, 참조형(reference type)이면 인스턴스의 주소가 복사된다.

- 메서드의 매개변수를 기본형으로 선언하면 단순히 저장된 값만 얻지만, 참조형으로 선언하면 값이 저장된 곳의 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능하다.

 

기본형 매개변수  변수의 값을 읽기만 할 수 있다. (read only)
참조형 매개변수  변수의 값을 읽고 변경할 수 있다. (read & write)

 

 

example1)

 

 

실행결과

- change메서드에서 main메서드로부터 넘겨받은 d.x의 값을 1000으로 변경했는데도 main메서드에서는 d.x의 값이 그대로이다.

- 'd.x'의 값이 변경된 것이 아니라, change 메서드의 매개변수 x의 값이 변경된 것이다.

- 즉, 원본이 아닌 복사본이 변경된 것이라 원본에는 아무런 영향을 미치지 못한다. 

- 기본형 매개변수는 변수에 저장된 값만 읽을 수만 있을 뿐 변경할 수는 없다.

 

example2) 

실행결과

- 참조형 매개변수를 가지는 change 메서드를 호출한 후에 d.x의 값이 변경되었다.

- change메서드의 매개변수가 참조형이라서 값이 아니라 '값이 저장된 주소'를 change메서드에게 넘겨주었기 때문에 값을 읽어오는 것뿐만 아니라 변경하는 것도 가능하다.

- change메서드의 매개변수를 참조형으로 선언했기 때문에, x의 값이 주소가 아닌 매개변수 d에 복사되었다.

- main메서드의 참조변수 d와 change메서드의 참조변수 d는 같은 객체를 가리키게 된다. 그렇기 때문에 매개변수 d로 x의 값을 읽는 것과 변경하는 것이 모두 가능하다.

 


참조형 반환타입

- 매개변수뿐만 아니라 반환타입도 참조형이 될 수 있다. 

- 반환타입이 참조형이라는 것은 반환하는 값의 타입이 참조형이라는 얘긴데, 모든 참조형 타입의 값은 '객체의 주소'이므로 정수값이 반환된다.

 

example)

 

- copy메서드는 새로운 객체를 생성한 다음에 매개변수로 넘겨받은 객체에 저장된 값을 복사해서 반환한다.

- 반환하는 값이 Data객체의 주소이므로 반환 타입이 'Data'이다.

- copy메서드의 반환타입이 'Data이므로, 호출결과를 저장하는 변수의 타입 역시 'Data'타입의 참조변수이어야 한다.

 

- copy메서드 내에서 생성한 객체를 main메서드에서 사용할 수 있으려면, 이렇게 새로운 객체의 주소를 반환해줘야 한다. 그렇지 않으면, copy메서드가 종료되면서 새로운 객체의 참조가 사라지기 때문에 더 이상 이 객체를 사용할 방법이 없다.

 

'Java > Basic' 카테고리의 다른 글

[Java] 생성자(Constructor)  (0) 2020.03.21
[Java] 클래스 메서드(satic메서드)와 인스턴스 메서드  (0) 2020.03.20
[Java] JVM의 메모리 구조  (0) 2020.03.20
[Java] 메서드(Method)  (0) 2020.03.14
[Java] 변수(Variable)  (0) 2020.03.14