JAVA/객체지향프로그래밍1

[JAVA] 참조형 반환타입

prize1209 2021. 6. 20. 23:14

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

반환타입이 참조형이라는 것은 반환하는 값의 타입이 참조형이라는 얘긴데,

모든 참조형 타입의 값은 '객체의 주소'이므로 그저 정수값이 반환되는 것일 뿐 특별할  것이 없다. 

 

예14)

public class ReferenceReturnEx {
	public static void main(String[] args) {

		Data3 d = new Data3();
		d.x = 10;

		Data3 d2 = copy(d); // copy 메소드 실행
		System.out.println("d.x=" + d.x);
		System.out.println("d2.x=" + d2.x);
	}

	static Data3 copy(Data3 d) {
		Data3 tmp = new Data3(); // 새로운 객체 tmp를 생성한다.
		tmp.x = d.x; // d.x의 값을 tmp.x에 복사한다.
		return tmp; // 복사한 객체의 주소를 반환한다.
	}
}

class Data3 {
	int x;
}

 

Data3 d2 = copy(d)는 메인 메소드의 d. 

static Data3 copy(Data3 d)의 d는 copy메소드의 d.

메인 메소드의 d 값이 copy메소드의 d값으로 복사된다. 그러면 copy메소드의 d 값이 d.x의 값인 10을 가리킨다.

tmp를 생성해 Data3 객체를 새로 생성한다. 

tmp.x = d.x; 의 d.x는 copy메소드의 지역변수d 다. 이 d가 가리키는 값이 10이다. 그래서 tmp.x에 10이 저장된다. 

return tmp; 는 0x200을 반환. 

반환타입이 참조형이면 객체의 주소를 반환한다. 

이 0x200이 copy(d)로 가고 d2에 대입된다. 결국 0x200 이 메인 메소드 d2에 대입되는 것이다.