본문 바로가기

오래된 흔적/C#.NET 기초강좌 #1

[HOONS C#.NET 기초강좌 #1] 03. 함수(Function)


hoons닷넷
[ C#.NET 기초강좌 #1]
03. 함수(function)
작성자 : NGong 작성일 : 2011-04-15 오후 4:16:04
E-mail : filmgdh골뱅이gmail.com Homepage : http://blog.daum.net/coolprogramming
함수란 간단히 말해 기능하는 명령들의 집합입니다. 명령들의 집합을 하나의 단위로 묶어 놓은 것입니다.

우리가 지금까지 사용한 System.Console.WriteLine() 함수입니다.
  1. class Program

    {

    static void Main()

    {

    System.Console.WriteLine(10);

    }

    }

10
System.Console.WriteLine()은 정수를 출력하는 기능을 합니다.

1, 함수 정의

다음은 함수의 구조입니다.( 기존에 작성한 C 예제를 캡쳐했다는...)
함수의_구조(1).PNG 함수의_호출과_반환.PNG
성의없이 복사만 했다는...

위 코드를 C#으로 반복하면.
  1. class Program

    {

    static void Func()

    {

    System.Console.WriteLine("Hello!");

    System.Console.WriteLine("안녕!");

    }

    static void Main()

    {

    Func();

    Func();

    Func();

    }

    }

Hello!
안녕!
Hello!
안녕!
Hello!
안녕!
출력결과는 위와 같습니다. Func()함수가 세 번 호출(call)되고 세 번 반환(return)되므로 Hello!와 안녕!이 세 번 출력됩니다.
여기서 System.Console.WriteLine() 함수는 어디에 있는 것일까요? 네! 이 함수는 .Net 이 제공하는 기본 클래스 라이브러리(BCL)에서 제공되며 mscorlib.dll 어셈블리 참조를 통해 사용할 수 있습니다. 또 모든 응용프로그램은 mscorlib.dll을 참조합니다.

다음은 정수를 출력하는 코드입니다.
  1. class Program

    {

    static void Main()

    {

    System.Console.WriteLine(1);

    System.Console.WriteLine(2);

    System.Console.WriteLine(3);

    System.Console.WriteLine(4);

    System.Console.WriteLine(5);

    }

    }

1
2
3
4
5

위 예제를 사용자 함수로 구현하면..
  1. class Program

    {

    static void Print(int n)

    {

    System.Console.WriteLine(n);

    }

    static void Main()

    {

    Print(1);

    Print(2);

    Print(3);

    Print(4);

    Print(5);

    }

    }

1
2
3
4
5
Print()함수는 서버로 Main()함수는 클라이언트로 동작하며 클라이언트에서 서버로 보내는 값들을 함수의 인자, 인수라 하며 이 인자 인수(1,2,3,4,5)를 받는 서버 측의 변수(n)를 매개변수라 합니다.

여러 인수를 갖는 함수
  1. class Program

    {

    static void Print(int n1, int n2, int n3)

    {

    System.Console.WriteLine("{0} {1} {2}", n1,n2,n3);

    }

    static void Main()

    {

    Print(10, 20, 30);

    }

    }

10 20 30

만약 서버에서 클라이언트로 값을 가져와야 하는 경우라면 반환 값을 사용해야 합니다.(out 매개 변수를 사용할 수 있습니다. 담에...)
아래는 매개 변수와 리턴 값을 갖는 함수 예제입니다.
  1. class Program

    {

    static int Add(int a, int b)

    {

    return a + b;

    }

    static int Sub(int a, int b)

    {

    return a - b;

    }

    static void Main()

    {

    int num;


    num = Add(10, 20);

    System.Console.WriteLine(num);

    System.Console.WriteLine(Add(30, 50)); //인라인 형태로 호출


    num = Sub(10, 20);

    System.Console.WriteLine(num);

    System.Console.WriteLine(Sub(30, 50));

    }

    }

30
80
-10
-20
Add(), Sub()함수는 서버로 Main()함수는 클라이언트로 동작합니다. 클라이언트에서 서버로 보내는 값들을 함수의 인자, 인수라 하며 이 인자 인수(10,20)을 받는 서버 쪽의 변수들(a, b)을 매개변수라 합니다. Add(), Sub()함수는 호출받는 측이라고 해서 Callee라고도 하며 Main()함수 측은 호출하는 측이라고 해서 Caller라고도 합니다.
아래는 Add() 함수의 구조입니다.
Add_함수의_구조.PNG

아래는 Add()함수와 Main()함수의 관계입니다.
Server와_Client.PNG
이렇게 클라이언트는 서버에게 특징 기능을 요구하며 서버는 클라이언트에게 기능을 서비스합니다.


2, 함수 중복(function overloading)

C#도 C++처럼 함수 중복을 지원합니다.
함수 중복이란 함수의 이름은 같고 함수의 매개변수 리스트가 다른(매개 변수 개수나 매개 변수 형) 함수를 말합니다 .

다음은 간단한 함수 중복의 예입니다.
  1. class Program

    {

    static void Main()

    {

    System.Console.WriteLine(10);

    System.Console.WriteLine(5.5);

    System.Console.WriteLine('A');

    }

    }


10
5.5
A

직접 구현한 '함수 중복'입니다.
  1. class Program

    {

    static void Print(int n)

    {

    System.Console.WriteLine(n);

    }

    static void Print(double d)

    {

    System.Console.WriteLine(d);

    }

    static void Print(char c)

    {

    System.Console.WriteLine(c);

    }

    static void Main()

    {

    Print(10);

    Print(5.5);

    Print('A');

    }

    }

10
5.5
A
세 함수 모두 Print라는 이름을 사용하지만 매개 변수의 형식이 다르므로 모두 다른 함수입니다. 또 컴파일러는 인자의 형식을 보고 정확한 함수를 호출하도록 코드를 결정합니다.

3, 출력 함수(System.Console.WriteLine())

System.Console.WriteLine() 함수는 많은 형태로 중복돼 있으므로 아래처럼 사용할 수 있지만, 인자의 개수와 형식이 다양하다면 문자열 형식(format) 지정을 사용해야 합니다.
  1. class Program

    {

    static void Main()

    {

    System.Console.WriteLine('A');

    System.Console.WriteLine(20);

    System.Console.WriteLine("Hello!");

    }

    }

A
20
Hello!

다음은 간단한 형식(format) 지정을 이용한 WriteLine()함수입니다.
  1. class Program

    {

    static void Main()

    {

    char c = 'A';

    int n = 10;

    double d = 3.14;

    string s = "Hello!";


    System.Console.WriteLine("{0} {1} {2} {3}", c, n, d, s);

    System.Console.WriteLine("{0}:{1}:{2}:{3}", c, n, d, s);

    System.Console.WriteLine("{0} {1} {2} ", 10,20,30);

    System.Console.WriteLine("{0} {0} {0} {0}", c);

    System.Console.WriteLine("{0} {0} {1} {1}", c, n, n);

    }

    }

A 10 3.14 Hello!
A:10:3.14:Hello!
10 20 30
A A A A
A A 10 10
첫 번째 인자는 문자열로 {숫자}를 사용하여 다음 인자의 출력 위치를 결정합니다.
더 막강한 기능을 지원하지만, 나머지는 차차 알아도 좋습니다.

위 함수는 자동 개행 문자를 출력합니다.
개행 문자를 출력하지 않는 System.Console.Write() 함수도 있습니다.
  1. class Program

    {

    static void Main()

    {

    char c = 'A';

    int n = 10;

    double d = 1.1;

    string s = "Hello!";


    System.Console.Write(c);

    System.Console.Write(n);

    System.Console.Write(d);

    System.Console.Write(s);

    }

    }

A101.1Hello!
자동 개행 문자를 출력하지 않아 위처럼 출력됩니다.

또 형식 지정을 사용하면...
  1. class Program

    {

    static void Main()

    {

    char c = 'A';

    int n = 10;

    double d = 3.14;

    string s = "Hello!";


    System.Console.Write("{0} {1} {2} {3}", c, n, d, s);

    System.Console.Write("{0}:{1}:{2}:{3}", c, n, d, s);

    System.Console.Write("{0} {1} {2} ", 10, 20, 30);

    System.Console.Write("{0} {0} {0} {0}", c);

    System.Console.Write("{0} {0} {1} {1}", c, n, n);

    }

    }

A 10 3.14 Hello!A:10:3.14:Hello!10 20 30 A A A AA A 10 10
위처럼 출력됩니다.

확장 문자를 사용하여 이렇게 출력할 수 있어요.
  1. class Program

    {

    static void Main()

    {

    char c = 'A';

    int n = 10;

    double d = 3.14;

    string s = "Hello!";


    System.Console.Write("{0} {1} {2} {3}\n", c, n, d, s);

    System.Console.Write("{0}:{1}:{2}:{3}\n", c, n, d, s);

    System.Console.Write("{0} {1} {2}\n", 10, 20, 30);

    System.Console.Write("{0} {0} {0} {0}\n", c);

    System.Console.Write("{0} {0} {1} {1}\n", c, n, n);

    }

    }

A 10 3.14 Hello!
A:10:3.14:Hello!
10 20 30
A A A A
A A 10 10
결과는 간단합니다.

WriteLine() 함수 정보 => http://msdn.microsoft.com/ko-kr/library/zba0x2tx(v=VS.100).aspx

수고하셨습니다. ^^