ref와 out 키워드는 인자로 넘긴 변수를 함수 내부에서 참조의 형태로 사용한다는 점에서 동일하다.
그러나 out 키워드는 ref보다 조금 더 특이한 상황에서 사용한다.
ref와의 차이점부터 정리하자면 out은 초기화된 값이 인자로 들어오든 말든 상관이 없으나, ref는 초기화 된 값을 가지고 사용하는 데 초점이 맞춰져 있다.
그리고 out은 해당 메서드가 끝나기 전까지 내부에서 인자로 받은 변수에 어떤 값이든 할당해야 하나, ref는 해당 값을 메서드 내부에서 변경하든 말든 상관없다.
즉, ref는 레퍼런스이므로 값을 복사하지 않고 참조해서, 변수를 사용하거나 변경하는 것이 주 목적인 반면, out은 들어온 변수가 어떤 형태로 들어왔든 간에, 꼭 뭔가 값을 받아서 갖고 나가게 만들어야 한다 보면 좋다.
일단 아래는 ref를 사용한 간단한 예제이다.
문제없이, 0으로 초기화되었던 i가 foo() 함수를 통해 3이라는 값을 할당받는다.
만약 ref로 들어온 값이 초기화가 안 되었다면, 컴파일 오류가 뜰 것이다.
j는 값이 초기화되지 않았음에도, out으로 지정된 bar() 함수로 인해 값을 들고나가게 된다.
여기서 foo 내부에 a = 3 부분을 주석 처리 해도 실행이 가능하나, bar 함수의 내부 a = 15를 주석처리 하면 실행을 할 수 없다. out 키워드를 사용했기에, 메서드를 벗어나기 전에 a 값에 대한 반환을 해줘야 하기 때문이다.
정리하자면, ref는 인자로 받은 변수를 수정하거나 복사 없이 사용하는 데 사용되고, out은 메서드 안에서 만들어진 어떤 값을 변수에 넣어 반환하는 데 사용한다고 보면 된다.
[출처] [C#] ref 키워드와 out 키워드의 차이|작성자 맹뭉쓰
'개발언어 > C#' 카테고리의 다른 글
[C#] WinAPI(Kernel32 dll) 사용하기 (0) | 2020.11.03 |
---|---|
[C#] if ~else if를 한 줄로 '삼항 연산자' (0) | 2020.11.03 |
[c#] [StructLayout(LayoutKind.Sequential)] (0) | 2020.11.02 |
[C#] - internal 접근 한정자 (0) | 2020.11.02 |
[C#]포인터나 핸들은 IntPtr 이용해 받기 (0) | 2020.11.02 |