참조 – 4.참조 반환

함수의 참조 반환

함수에서 참조 반환(returning references)할 수 있습니다. 참조 반환하기 위해서는 함수 정의에서 함수명 앞에 참조연산자(reference operator) &를 붙입니다.

함수에서 참조가 아닌 값으로 반환하게 되면 호출측에서 받게 되는 것은 함수 내의 반환값의 복사본을 받게 될 것입니다.

위와 같이 참조가 아닌 값으로 반환하게 되면 객체 $a와 객체 $b는 완전히 별개의 객체입니다. 따라서 실행결과를 보면 아래와 같이 객체의 멤버변수 $mb의 값은 틀립니다.

그러나 참조를 반환하기 위해 함수정의를 function &foo(&$obj)와 같이 수정한다면 객체 $b는 객체 $a의 참조(별명)이 되어 $a와 $b 모두 동일한 객체 내용을 나타내게 됩니다. 즉, $a를 가지고 멤버를 다루더라도 $b의 멤버가 수정되게 되지요. 아래는 수정하였을 때의 실행 결과입니다.

위에서 한가지 더 주의할 것이 있습니다. $b = &foo($a) 에서 대입연산자로 $b를 할당할 때 반드시 참조로 할당하여야 한다는 것입니다. 아무리 함수가 참조를 반환하더라도 $b = foo($a) 와 같이 하게 되면 $b는 $a의 객체가 참조되는 것이 아니라 대입되는 과정에 복사되는 것입니다. 따라서 함수로부터 참조를 반환할 때는 함수 정의 부분과 호출측의 대입 부분 모두 참조연산자 &를 붙여야 합니다.

답글 남기기