자료 관리

out ref 키워드

noc777 2024. 10. 25. 20:34
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 키워드를 더 자세히 알아보는 것은 나중으로 하고 지금은 이런 개념이다 정도만 정리해둔다.

 

'자료 관리' 카테고리의 다른 글

AI 네비게이션  (0) 2024.10.27
Light (Unity)  (0) 2024.10.25
시간 복잡도  (0) 2024.10.23
오브젝트 풀링  (0) 2024.10.23
RayCast  (0) 2024.10.23