C# 복습하기 5) 메소드

 

값에 의한 전달

 - 매개변수는 메서드 외부에서 메서드 내부로 데이터를 전달하는 매개체일 뿐이다.

 - 그 데이터가 값이든 참조든 상관없이 데이터가 복사된다!

public static void Main()
{
    int a = 0;
    int b = 1;
    int sum = Plus(a, b);
}

public int Plus(int x, int y)
{

}

 - 위와 같은 상황에서는, a에는 0, b에는 1이 할당되어있다가 Plus를 선언하는 순간

   int x = a; 와 int y = b; 로 값이 복사된다. (값에 의한 전달)

 

참조에 의한 전달

 - ref 키워드를 이용하여 

public static void Main()
{
    int a = 0;
    int b = 1;
    Plus(ref a, ref b);
}

public void Plus(ref int x, ref int y)
{
    x += y;
}

 

메소드의 결과를 참조로 반환하기

 - 결과를 반환하는 참조 반환 값

 - 아래의 메서드에서 m_value는 멤버 변수를 사용했음에 주의.

class TempClass
{
    int m_value = 1;

    public ref int RefMethod()
    {
        return ref m_value;
    }
}

 - 참조로 반환하도록 구현했지만, 호출할 때 ref를 사용하지 않으면 평범한 메서드처럼 값으로 반환한다.

public static void Main()
{
    TempClass temp = new TempClass();
    int result = temp.RefMethod();
}    

 - 참조로 넘겨받고 싶다면 아래와 같이 참조할 지역변수와 호출할 메서드의 이름 앞에 ref 키워드를 써야 한다.

public static void Main()
{
    TempClass temp = new TempClass();
    ref int result = ref temp.RefMethod();
}    

 

출력 전용 매개변수 out

 - ref도 똑같이 사용하여 여러 값을 반환할 수 있음.

 - 다른 점은 결과를 해당 매개변수에 저장하지 않으면 컴파일 에러를 출력해줌.

public void Divide(int a, int b, out int quotient, out int remainder)
{
    quotient = a / b;
    remainder = a % b;
}

 

로컬 함수

 - 함수 내부에서 사용할 수 있는 별도의 함수를 선언 가능

 - 메서드 밖에서는 쓸 일이 없는 반복적인 구절을 하나로 묶는 경우에 사용

public void Method()
{
    int temp = InnerMethod();

    int InnerMethod()
    {
        return 1;
    }
}

 

 

 

 

 

댓글

Designed by JB FACTORY