저 하늘의 구름처럼~

out 키워드 vs ref 키워드 & 오버로드의 특징 본문

DotNet

out 키워드 vs ref 키워드 & 오버로드의 특징

강백호v 2010. 5. 12. 09:49
out 키워드는 인수를 참조로 전달하는데 사용하며 ref와 비슷하다. 하지만 ref의 경우 변수를 전달하기 전에 초기화를 반드시 해주어야 하지만 out의 경우 초기화를 하지 않아고 사용해도 된다. 하지만 out을매개변수로 사용하는 메서드 안에서는 반드시 out으로 선언된 변수에 값을 할당해 주어야만 한다.
out ,ref 매개변수를 사용하려면 메서저 정의와 호출하는 메서드에 모두 out ,ref키워드를 사용해야만 한다. ref 와 out 키워드는 런타임에는 서로 다르게 취급하지만 컴파일 타임에서는 동일하게 취급한다.
그렇기 때문에 함수를 오버로딩하고자 하는 경우라면 한메서드에는 ref 인수를 사용하고 다른 메서드에는 out 메서드를 사용하는 경우 컴파일 타임에 같다고 판단하기 때문에 메서드를 오버로딩이 불가능하다.

- 오버로드 시의 ref,out의 특징 -

ex 1)    아래 두 구문의 경우 오버로드가 불가능하다. 같다고 판단한다.
public void Out_Test(out int c)
{
c = 1;
}

public void Out_Test(ref int c)
{
c = 1;

ex 2) 아래의 두 구문과 같이 인자가 같은 형태이지만 ref나 out 키워드만 들어간 경우 서로 다르게 판단하여 오버로드가 가능하다. 
public static void Ref_Test( ref double c)
{
    c = 1;
}

public static void Ref_Test(double c)
{
    c = 1;
}

※ 오버로드 시에는 함수의 종류를 판단할 때  함수의 반환형은 고려하지 않고, 전달 되는 매개변수로 구분을 한다. 전달되는 매개변수의 타입이 다르거나,갯수가 틀리다면 서로 다른 경우 다른 함수로 인식을 한다.

그렇기 때문에 아래와 같이 함수를 오버로드 할 수 없다.
- public void Over_Test(int a);
- public int Over_Test(int b);

아래와 같은 경우는 함수 오버로드가 가능하다.
- public void Over_Test(int a);
- public void Over_Test(double b);
- public void Over_Test(int a, double b);