2015년 3월 5일 목요일

뇌자극 C# 5.0 - 6강

-메소드로 코드 간추리기-

6.1 메소드란?


메소드는 일련의 코드를 하나의 이름 아래 묶은 것.
이렇게 묶은 코드는 메소드의 이름을 불러주는 것만으로도 실행 가능

메소드 선언하는 형식

class 클래스의 이름
{
   한정자 반환형식 메소드의이름 (매개변수 목록)
   {
     실행하고자 하는 코드
     ....

     return 메소드의 결과;
   }
}

예제)

class Calculator
{
    public static int Puls(int a, int b)
    {
       Console.WriteLine("Input : {0}, {1}", a, b);
       int result = a + b;
       return result;
    }
}

int x = Calulator.Plue( 3, 4 ); //x는 7

6.2 return에 대하여


return문은 언제든지 메소드 중간에 호출되어 메소드를 종결시키고
프로그램의 흐름을 호출자에게 돌려주는 기능

6.3 매개 변수에 대하여


메소드 외부에서 메수드 내부로 데아터를 전달하는 매개체 역할을 하는 변수
한 변수를 또 다른 변수에 할당을 하면 변수가 담고 있는 데이터만 복사가 될 뿐이다.

메소드를 호출할 때 데이터를 복사해서 매개 변수에 넘기는 것을
"값에 의한 전달(Call by value)"라고 부른다.

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


값에 의한 전달은 매개 변수가 값을 복사해서 넘기기에 원본 변수가 변하지 않는다.
원본 변수를 변화 시키려면 "참조에 의한 매개 변수" 전달을 해야한다

참조에 의한 매개 변수 전달법은 ref 키워드를 쓰면 된다.

예)
static void Swap(ref int a, ref int b)
{
   int temp = b;
   b = a;
   a = temp;
}

6.5 출력 전용 매개 변수


대부분의 경우 메소드의 결과는 1개면 충분하다.
가끔 2개 이상의 결과 값이 필요한 경우에는 ref나 out 키워드를 사용한다.
C#에서는 out 키워드 쓸 것을 권장한다.

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

int a = 20;
int b = 3;
int c = 0;
int d = 0;

Divide( a, b, out c, out d );

Console.WriteLine("Quotient : {0}, Remainder {1}", c, d);

6.6 메소드 오버로딩


오버로딩(Overloading)란? "과적하다"의 뜻을 가지고 있다.
하나의 메소드 이름에 여러 개의 구현을 올리는 것을 뜻한다.
(오버라이딩과 헷깔리는데 전혀 다른 뜻이다)

예제)

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

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

위를 보면 메소드 이름과 기능은 같고, 반환 형식과, 매개 변수 형식만 다르다.
메소드 오버로딩은 이름에 대한 고민을 줄여주고, 코드를 일관성 있게 유지해준다.

6.7 가변길이 매개 변수


가변길이 매개 변수란? 갯수가 유연하게 변할 수 있는 매개 변수를 말한다.

예)

int total = 0;

total = Sum(1, 2);
total = Sum(1, 2, 3);
total = Sum(1, 2, 3, 4);
total = Sum(1, 2, 3, 4, 5);
.........

위와 같이 Sum이라는 이름은 같고 매개 변수의 개수가 다르다고
각자 따로 만드는 것은 시간 낭비다.
가변길이 매개 변수는 params 키워드배열을 이용해서 선언한다.

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

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

가변길이 매개 변수는 형식은 같으나, 매개 변수의 개수가 유연하게 달라질 때 적합하다.

6.8 명명된 매개 변수


메소드를 호출할 때 매개 변수 목록 중
어느 매개 변수에 데이터를 할당할 것인지를 결정하는 것은 "순서"다.

C#은 순서에 상관 없이 변수의 이름에 근거해서 데이터를 할당 할 수 있다.
방법은 변수 이름 뒤에 : 를 붙이고 그 뒤에 데이터를 넣으면 된다.

예제)
static void PrintProfile(string name, string phone)
{
    Console.WriteLine("Name:{0}, Phone:{1}", name, phone);
}

static void Main(string[] args)
{
   PrintProfile(name : "윤아", phone : "010-123-4567");
}

6.9 선택적 매개 변수


매개 변수를 특정 값으로 초기화 할 수 있다.

예)
void MyMethod( int a = 0, int b = 0 )
{
    Console.WriteLine( "{0},  {1}", a, b );
}

선택적 매개 변수는 항상 필수 매개 변수 뒤에 와야 한다.(매개 변수가 없는 경우는 제외)

예)
void MyMethod_0( int a = 0 )
{
   Console.WriteLine( "{0}", a );
}

void MyMethod_1( int a = 0, int b = 0 )
{
   Console.WriteLine( "{0}, {1}", a, b );
}

void MyMethod_2( int a = 0, int b, int c = 10, int d = 20 )
{
   Console.WriteLine( "{0}, {1}, {2}", a, b, c );
}

댓글 없음:

댓글 쓰기