Home C#8 | ref와 out
Post
Cancel

C#8 | ref와 out

ref와 out

  • 매개 변수가 참조로 전달되었음을 나타냄
  • 참조, Refrence, Pointer

ref

  • 값의 주소가 채워져 있어야 사용가능
1
2
3
4
5
6
7
8
class People
{
    string name;
    public change_name(string myname)
    {
        myname = "홍길동"
    }
}


  • ex 1) Call by Value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RefOut : MonoBehaviour
{
    void set_string_ref(string str)
    {                        

    }                        

    void Start()             
    {
        //  데이터를 그대로 모두 전달
        set_string_ref("123456789123456789");
    }
}

//  데이터를 모두 전달 받기 때문에 속도 저하 발생


  • ex 1-1) Call By Refrence (ref를 사용 하면 데이터 주소를 받아온다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RefOut : MonoBehaviour
{
    void set_string_ref(ref string str)
    {
        str = "1번이 바뀜";
    }

    void Start()
    {
        string str1 = "1번"; 
        set_string_ref(ref str1);

        Debug.Log(str1);
    }
}
1
2
3
 출력 

1번이 바뀜

out

  • 저장소를 줄테니 값의 주소를 채워줘
  • 값의 주소가 채워 지지 않아도 사용가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class RefOut : MonoBehaviour
{
    void set_string_out(out string str)
    {
        str = "2번이 바뀜";
    }

    void Start()
    {
        string str2;
        set_string_out(out str2);

        Debug.Log(str2);
    }
}
1
2
3
 출력 

2번이 바뀜
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int a = 1;
        int b = 2;

        swap(ref a, ref b);

        Debug.Log(a + ":" + b);

        // ex) ref 키워드를 사용하고, Generic함수를 만드시오

        
    }

    // Generic <T>를 사용
    void swap<T>(ref T T1, ref T T2)
    {
        T temp;
        temp = T1;
        T1 = T2;
        T2 = temp;
    }
}

참고 사이트

This post is licensed under CC BY 4.0 by the author.