[PHP] 참조 (reference : &) + 스위프트 비교

필그램

·

2017. 2. 6. 08:48

참조는 메모리의 주소값을 같이 사용하는 개념입니다.

보통 참조변수는 &를 앞에 붙입니다.


일반적으로 변수의 값을 사용할때 입니다.

3라인의 변수 $number 값이  $pointer로 넘어갑니다.


<?php
$number = 3;
$pointer = $number; // Sets $pointer to a reference to $number
echo $number."<br/>"; // Outputs '3' and a line break
$pointer = 24; // Sets $number to 24
echo "number is now : $number.<br/>"; // Outputs '24'
echo "pointer is : $pointer";


결과:

3
number is now : 3.
pointer is : 24


위와같이 $pointer 값이 변경되면, 그 값만 변경되고, $number의 값은 변경되지 않습니다.



하지만 3라인의 변수값에 &를 추가하면  $pointer 변수는 $number변수의 주소값을 참조합니다.

이 의미는 $pointer 와 $number는 같은 주소값을 사용한다는 것입니다.

<?php
$number = 3;
$pointer = &$number; // Sets $pointer to a reference to $number

echo $number."<br/>"; // Outputs '3' and a line break
$pointer = 24; // Sets $number to 24
echo "number is now : $number.<br/>"; // Outputs '24'
echo "pointer is : $pointer";

결과는 아래와 같습니다.

3
number is now : 24.  // 
pointer is : 24



위처럼 $pointer 변수 값이 변하면 $number값도 같이 변합니다.


왜냐하면 메모리의 같은 주소값을 사용하기 때문입니다.



그림의 오른쪽이 메모리 입니다.  그림처럼 두개의 변수가 하나의 주소를 참조하는 것입니다.


[SWIFT 의 경우] 

애플 레퍼런스 예제 입니다


// Value type example
struct S { var data: Int = -1 }
var a = S()
var b = a						// a is copied to b
a.data = 42						// Changes a, not b
println("\(a.data), \(b.data)")	// prints "42, -1"

Struct로 일반 값을 사용하는 경우 a, b의값이 달라지지만,

// Reference type example
class C { var data: Int = -1 }
var x = C()
var y = x						// x is copied to y
x.data = 42						// changes the instance referred to by x (and y)
println("\(x.data), \(y.data)")	// prints "42, 42"

Class의 경우 레퍼런스 참조로 동일한 값으로 변경됩니다.


자바는  '::'로 레퍼런스를 표기하는데, 좀 깊이가 있어 여기서 설명은 제외합니다.