void Update()
{
RaycastHit hit;
if (Physics.Raycast(ray, out hit, rayDistance, layerMask))
{
if (hit.collider.gameObject != curInteractGameObject)
}
}
out 키워드는 매개변수를 사용하면서 같은 메서드 내에 선언된 변수에 이 매개변수를 반환해주고 싶을 때 사용된다.
그리고 보통 사용할 때는 두개 이상의 반환값을 돌려받고 싶을 때 사용이 된다고 한다.
ex) (out int i , out int j ) (벌써 반환되는값이 두개)
코드블록의 내용을 보면 이미 코드의 흐름에선 hit 변수는 아무값도 할당되지 않고 지나갔지만 out hit 매개변수를 통해 조건에 부합할 때 hit에 값을 할당하여 밑에선 Ray에 맞은 대상의 정보를 불러와 또 다른 조건문을 지나가고 있다.
if (Physics.Raycast(ray, out RaycastHit hit, rayDistance, layerMask))
//원래는 RaycastHit hit; 으로 변수를 미리 선언하였으나 out Raycast hit 를 매개변수로 써주면 생략이 가능
또한 out 키워드를 사용하였을 때 매개변수로 활용할 변수를 미리 선언하지않고 생략이 가능하다.
ref 키워드 또한 매개변수로 상호작용하는 것이 가능하다.
public void Testing()
{
int number = 10;
Increment(ref number);
Console.WriteLine(number); // 출력: 11
}
public void Increment(ref int number)
{
number++;
}
ref 키워드를 사용한 예시를 보면 ref 매개변수를 받는 메서드에서 매개변수를 활용하였을 때
메서드의 형식이 void 인데도 매개변수로 넘겨준 변수의 값이 변형이 되어있다. ref 키워드는 매개변수를 넘겨줌과 동시에 메서드에서 처리한 값을 다시 사용하고 싶을 때 쓰는 듯 하다.
그런데 C#에선 자주 쓸일이 없다고한다. 사실 위와 같은 코드는 아래처럼 반환자만 바꾸고 반환받아 사용하여도 동작할 것이다.
public void Testing()
{
int number = 10;
number = Increment(ref number);
Console.WriteLine(number); // 출력: 11
}
public int Increment(int number)
{
number++;
return number;
}
그래서 ref 키워드를 더 자세히 알아보는 것은 나중으로 하고 지금은 이런 개념이다 정도만 정리해둔다.