반응형
C#에 보면 out이나 ref 키워드를 본적이 있을 것이다.
쓰임새를 보면 이 2개는 거의 같은 느낌으로 쓰이는데 무슨 차이가 있는지 궁금해서 정리해 보았다.
우선 out과 ref의 차이를 예시를 통해서 보자.
먼저 out의 예제이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Test_Out { static void initArray(out int[] arr) { arr = new int[3] {1, 2, 3}; } static void Main() { int[] array; initArray(out array); // arr[3] = {1, 2, 3} } } | cs |
이어서 ref의 예제를 보면...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Test_Ref { static void initArray(ref int[] arr) { arr = new int[3] {1, 2, 3}; } static void Main() { int[] array = {4, 5, 6} initArray(ref array); // arr[3] = {1, 2, 3} } } | cs |
이렇게 출력된다.
얼핏보면 둘의 차이는 없어보인다. 하지만 10번째 라인을 보면 둘의 차이를 알 수 있다.
바로 초기화이다.
out 키워드는 선언 후 초기화 없이 바로 참조형식으로 넘겨줄 수 있지만 ref 키워드는 반드시 선언 후 값을 생성해 준 후에 파라미터로 넘겨줄 수 있다. 그 이후는 둘다 참조형식(Call by reference)으로 동일하게 동작한다.
참고로, ref와 out으로 다형성은 인정되지 않으니 주의하자.
반응형
'Computer & Program > C#' 카테고리의 다른 글
[C#]as와 is 연산자 (0) | 2016.03.29 |
---|
댓글