본문 바로가기
Computer & Program/C#

[C#]out과 ref 키워드 차이

by TDRemon 2016. 1. 27.
반응형

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] {123};
    }
 
    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] {123};
    }
 
    static void Main()
    {
        int[] array = {456}
        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

댓글