ref 키워드
public void Plus(int i, ref int value) // 5와 value의 주소값을 받음.
{
value += i // value의 주소값을 통해서 내부의 저장된 10과 5가 더해져서 다시 value에 대입된다.
}
static public void Main(string[] args)
{
int value = 10; // 참조 형태로 넘기기 위해서는 미리 초기화가 되어 있어야 한다.
Plus(5, ref value); // 참조 형태로 매개 변수에 넣었다. (value의 주소가 넘어감)
Console.WriteLine(Plus); //참조 형태로 인해 값이 바뀌었기 떄문에, value의 값은 15로 출력된다.
}
ref 키워드를 전달할 때나 받을 때 명시적으로 적어줘야 한다.
out 키워드
public void Setting(out int value) // 다만 이 메소드 내에서 무조건 값의 할당이 일어나야한다.
{
value = 15; // 값의 할당이 일어난 모습
}
static public void Main(string[] args)
{
int value; // 초기화를 안해도 된다.
Setting(out value);
Console.WriteLine(value); // 15 출력
}
out 키워드도 전달할 때나 받을 때 명시적으로 적어줘야 한다.
이러면 ref와 별 차이점을 못느낄테니 예시를 하나를 더 두도록 하겠다.
public void Setting(int a, float b, out int value1, out float value2)
{
value1 = a;
value2 = b;
}
static public void Main(string[] args)
{
int value1;
int value2;
Setting(10, 3.14, out value1, out value2);
Console.WriteLine(value1, value2); // 10과 3.14 출력
}
ref 키워드는 이미 할당된 값을 다른 메소드 내에서 바꾸거나 참조 할 때 쓰는 느낌이라면,
out 키워드는 변수 선언부가 아닌 다른 메소드 내에서 초기화를 하고 싶을 때 사용하는 느낌이다.
(ref - 변수의 주소값(초기화 이미 된 상태)을 줄테니 거기서 변경해봐)
(out - 변수의 주소값(초기화가 되지 않은 상태)을 줄테니 거기서 초기화 해봐)
개인적인 공부를 위해 정리한 내용이며, 틀린 점이 있을 수 있습니다.
만일 틀린 내용이 있다면, 댓글로 알려주시면 감사하겠습니다.