Skip to content

뇌를 자극하는 C Sharp 4.0 프로그래밍 메소드로 코드 간추리기 #
Find similar titles

메소드란? #

  • 메소드가 함수, 프로시져, 서브루틴 등과 다른 점은 클래스 안에 존재한다는 것.

return에 대하여 #

  • return문은 메소드를 종결시키고 프로그램의 흐름을 호출자에게 돌려준다.

재귀 호출(Recursive Call)

메소드가 자기 자신을 스스로 호출하는 것. 재귀 호출은 코드를 단순하게 구성할 수 있다는 장점이 있는 한편 성능에 나쁜 영향을 주기 때문에 주의해서 사용해야 한다.

매개 변수에 대하여 #

  • 매개 변수도 메소드 외부에서 메소드 내부로 데이터를 전달하는 매개체 역할을 할 뿐이지 근본적으로는 변수이기 때문에 한 변수를 또 다른 변수에 할당하면 그 데이터가 값형식이든 참조형식이든 상관 없이 변수가 담고 있는 데이터만 복사된다.
  • 이와 같이 메소드를 호출할 때 데이터를 복사해서 매개 변수에 넘기는 것을 "값에 의한 전달(Call by value)"라고 한다.

참조에 의한 매개 변수 전달 #

int x = 3;
int y = 4;
Swap(ref x, ref y);

void Swap (ref int a, ref int b)
{
    int temp = b;
    b = a;
    a = temp;
}
  • 매개 변수를 "참조에 의한 전달(Call by reference)"로 넘기면 매개 변수가 메소드에 넘겨진 원본 변수를 직접 참조하게 된다. 따라서 메소드 안에서 매개 변수를 수정하면 이 매개 변수가 참조하고 있는 원본 변수에 수정이 이루어지게 된다.
  • 참조에 의한 매개 변수 전달은 ref 키워드를 사용하면 된다.

출력 전용 매개 변수 #

iint a = 20;
int b = 3;
int c;
int d;
Divide(a, b, out c, out d);

void Divide (int a, int b, out int quotient, out int remainder)
{
    quotient = a / b;
    remainder = a % b;
}
  • 결과를 2개 이상 반환하는 메소드를 만들고자 할 때 ref 키워드를 이용하면 된다. 그런데 C#에서는 out 이라는 보다 안전한 방법을 제공하고 있으므로 그것을 사용하면 좋다.
  • out 키워드를 이용해서 변수를 넘길 때는 메소드가 해댕 매개 변수에 결과를 저장하지 않으면 컴파일러가 에러를 출력한다. 또한 호출된 메소드에서는 입력된 out 매개 변수를 "읽을" 수 없고 오직 "쓰기"만 가능하다. 출력 전용 매개 변수를 다른 용도로 사용하는 것을 금지하는 것.

메소드 오버로딩 #

int Plus (int a, int b)
{
    return a + b;
}

double Plus (double a, double b)
{
    return a + b;
}

// 위의 매개 변수를 double로 받는 것은 일반화 프로그래밍을 하는 편이 나아 보여서 매개변수 개수와 형식이 다른 버전을 별도로 추가하였다.
int Plus (int a, long b, double c)
{
    return a + b + c;
}
  • 메소드 오버로딩이란 하나의 메소드 이름에 여러 개의 구현을 올리는 것을 의미한다.
  • 이런 식으로 오버로딩을 해 놓으면 컴파일러가 메소드 호출 코드에 사용되는 매개 변수의 수와 형식을 분석해서 --오로지 매개 변수만 분석하며 반환 형식은 따지지 않는다-- 어떤 버전이 호출될 지를 찾아 준다. 실행할 메소드의 버전을 찾는 작업이 컴파일 타임에 이루어지므로 성능 저하는 없다.

가변길이 매개 변수 #

int total = 0;

total = Sum(1, 2);
total = Sum(1, 2, 3);
total = Sum(1, 2, 3, 4, 5, 6, 7, 8, 9);

int Sum (params int[] args)
{
    int sum = 0;

    for (int i = 0 ; i < args.Length ; i++ )
    {
        sum += args[i];
    }

    return sum;
}
  • 가변 길이 매개 변수란 개수가 유연하게 변할 수 있는 매개 변수로 이를 이용하면 모든 매개 변수의 합을 구하는 메소드를 따로 오버로딩 하여 구현하지 않아도 된다.
  • 가변길이 매개변수는 변수의 형식이 같은 경우에만 유효하므로 변수의 형식이 달라지는 경우는 오버로딩을 해야 한다.

명명된 매개 변수 #

PrintProfile(name: "박수영", phone: "010-1234-5678");

void PrintProfile (string name, string phone)
{
    Console.WriteLine("Name: {0}, Phone: {1}", name, phone);
}
  • C# 에서는 명명된 매개 변수(Named Parameter)를 이용해서 매개 변수에 데이터를 할당할 수 있다.
  • 명명된 매개 변수를 이용하면 코드 가독성도 좋아지며 매개 변수가 많아졌을 때 순서가 꼬여 발생할 수 있는 오류를 줄일 수 있다는 점에서 좋은 방법이라 할 수 있다.

선택적 매개 변수 #

MyMethod();
MyMethod(1);
MyMethod(1, 2);

void MyMethod (int a = 0, int b = 0)
{
    Console.WriteLine("{0}, {1}", a, b);
}
  • 메소드의 매개 변수는 위 코드와 같이 기본값을 가질 수 있다. 이러한 기본값을 가지는 매개 변수는 필요에 따라 데이터를 할당하거나 할당하지 않을 수 있기 때문에 "선택적 매개 변수(Optional Parameter)"라고 부른다.
  • 선택적 매개 변수는 항상 필수 매개 변수 뒤에 와야 한다.
  • 선택적 매개 변수는 편의성이 있긴 하지만 모호함도 함께 발생하므로 주의해서 사용할 필요가 있다. 사용할 때는 명명된 매개 변수와 함께 사용하면 낫다.

Suggested Pages #

0.0.1_20140628_0