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;
}
}