[C#] 2.2 해야 할 일에 관한 문법 사항 2.2.2 식과 문

C#에서 수행해야 할 논리적 코드를 표현하는 방법에는 연산자 이외에도 식과 문을 제공하고 있습니다. 수행해야 할 코드에서 값이나 변수, 속성, 리터럴, 연산자, 함수 호출 등의 코드 조각을 식(Expressions)이라 합니다. 그리고 수행해야 할 코드를 세미콜론 단위로 구분하여 표현하는데 이를 문(Statements)이라 부릅니다. 결국, 문을 구성하는 것이 식이라 할 수 있습니다.

식에는 단순히 변수이름을 사용하는 것과 리터럴 상수를 사용하는 것, 메서드 이름과 인자를 사용하는 것이 있습니다.

static void Main(string[] args)
{
    string s = string.Empty;
    s = "Hello"; //리터럴 상수 사용
    string s2 = s; //변수 이름을 사용
    Console.WriteLine(s2); //호출문
}

문에 종류에는 선언문과 연산 구문과 같이 단순구문과 조건(선택)문, 반복문, 점프(분기)문, 예외 처리문 등과 같이 블록을 구성하여 블럭 내에 수행해야 하는 절차를 표현하는 문이 있습니다. 그리고 C#의 조건문과 반복문은 C언어와 C++과 다르게 조건에 사용하는 식의 연산 결과가 반드시 bool형이어야만 합니다.

조건식에 bool 형식이 아닌 형식을 사용했을 때의 오류 화면
[그림 9] 조건식에 bool 형식이 아닌 형식을 사용했을 때의 오류 화면
static void Main(string[] args)
{
    int i = 0; //선언문
    Console.WriteLine("수를 입력하세요.."); //호출식(문)
    try //예외 처리문의 try 블록
    {
        i = int.Parse(Console.ReadLine());
        if ((i % 2) == 0) //조건문
        {
            Console.WriteLine("입력한  수 {0}는 짝수입니다..", i);
        }
        else
        {
            Console.WriteLine("입력한 수 {0}는 홀수입니다. ", i);
        }

        int sum = 0;
        for (int index = 1; index < i; index++) //반복문
        {
            sum += index;
        }
        Console.WriteLine("1~{0}까지의 합은 {1}입니다.", 1, i, sum);
    }
    catch (Exception e) //예외 처리문의 catch 블록
    {
        Console.WriteLine("예외가 발생하였습니다. {0}", e.Message);
    }
}

▶if – else 문

조건식으로 bool 형식이 올 수 있으며 조건식의 결과에 따라 수행 여부를 결정합니다. 조건이 참일 때 수행하는 구문만 정의할 때는 else 부분을 생략할 수 있습니다.

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("이름을 입력하세요.");
        string name = Console.ReadLine();

        if (name != string.Empty) //이름을 입력하였을 때
        {
            Console.WriteLine("{0}의 주소를 입력하세요. ",name);
            string addr = Console.ReadLine();

            if (addr != string.Empty)//주소를 입력하였을 때
            {
                Console.WriteLine("{0}의 주소는 {1}입니다. ", name, addr);
            }
        }
        else //이름을 입력하지 않았을 때
        {
            Console.WriteLine("이름을 입력하지 않았습니다.");
        }

    }
}

▶ switch 문

여러 가지 경우의 코드에서 원하는 코드만 수행할 수 있습니다. 각 경우에 수행할 코드는 case문을 사용하며 일치하는 case문부터 시작합니다. 그리고 break문을 만나면 switch문을 빠져나갑니다. case문으로 표현하지 않은 때에 수행할 코드는 default문을 사용합니다.

그리고 C언어와 C++언어와 다르게 문자열을 사용할 수 있어 개발에 편의성을 높였습니다. 또한, C언어와 C++과 다르게 case문에 수행할 코드가 있을 때에는 break문을 명시해야 합니다.

static void Main(string[] args)
{
    string name = string.Empty;
    Console.WriteLine("이름을 입력하세요..");
    name = Console.ReadLine();

    switch (name)
    {
    case "홍길동": Console.WriteLine("휘리릭~"); break;
    case "강감찬":
    case "을지문덕 ": Console.WriteLine("이랴~"); break;
    default: Console.WriteLine("음냐뤼~");     break;
    }
}

▶ while , do while 문

while문과 do while문은 조건식이 참일 동안 반복해서 수행합니다. if문과 마찬가지로 조건식은 bool 형식이 와야 합니다. 그리고 반드시 한 번은 수행해야 한다면 do while문을 사용할 수 있습니다.

반복문을 수행 도중에 빠져나가려고 할 때에는 break문을 사용합니다. 또한, 반복문의 수행 도중에 반복문 시작으로 가고자 할 때는 continue문을 사용합니다. for문을 이용하여 반복문을 표현할 때도 break와 continue에 대한 사항은 같습니다.

static void Main(string[] args)
{
    int i = 0;
    while (i < 10)
    {
        Console.WriteLine("{0}", i);
        i++;
    }

    do
    {
        i++;
        Console.WriteLine("do-while:{0}", i);
    } while (i < 10);
}

▶ for 문

while문 처럼 조건식이 참일 동안 반복해서 수행합니다. 반복문을 수행하기 전에 초기화와 반복문에 조건을 변화시키는 부분이 있어서 초기 구문을 생략하는 개발자의 실수가 줄어듭니다.

static void Main(string[] args)
{
    for(int i = 0; i<10; i++) 
    {
        Console.WriteLine("for:{0}", i); 
    }
}

▶ foreach문

배열과 같은 컬렉션에 있는 각 요소에 대해 같은 작업을 수행할 때 사용됩니다. 사용자가 정의한 형식을 foreach문에서 사용하려면 GetEnumerator, MoveNext,Reset,Current 멤버가 있어야 합니다. 이 부분은 8장 인터페이스와 컬렉션에서 다루겠습니다.

static void Main(string[] args)
{
    int[] arr  = new int[]{2,3,4,5,6};
    foreach (int i in arr)
    {
        Console.WriteLine(i.ToString());
    }
}