C#/C# 기본

[C#] 분기문

로파이 2021. 10. 2. 17:08

C#에서 보이는 분기문 특징을 알아본다.

 

if-elseif-else 문

C/C++와 용법이 같다.

 

switch 문

일반적인 사용법은 C/C++와 용법이 같다.

C#에서 모든 자료형을 담을 수 있는 object 자료형이 있었는데,

object 변수에 대한 swtich 문 : object가 갖고 있는 값의 실제 타입으로 분기시킬 수 있다.

또한 string 값으로부터 switch 문을 사용해 분기 시키는 것도 가능하다.

namespace HelloWorld
{
    class MainApp
    {
        static void Main(string[] args)
        {
            object obj = "str";

            switch (obj)
            {
                case int i:
                    Console.WriteLine($"{i}는 int 형식입니다.");
                    break;
                case float f:
                    Console.WriteLine($"{f}는 float 형식입니다.");
                    break;
                default:
                    Console.WriteLine($"{obj}는 모르는 형식입니다.");
                    break;
            }

            Read();
        }
    }
}

case 문장에서 when 부사를 이용하여 추가 조건을 만들 수 있다.

namespace HelloWorld
{
    class MainApp
    {
        static void Main(string[] args)
        {
            object obj = "str";

            switch (obj)
            {
                case int i when i > 0:
                    Console.WriteLine($"{i}는 int 형식입니다.");
                    break;
                case float f when f > 0:
                    Console.WriteLine($"{f}는 float 형식입니다.");
                    break;
                default:
                    Console.WriteLine($"{obj}는 모르는 형식입니다.");
                    break;
            }

            Read();
        }
    }
}

 

switch 식의 사용

코드의 간결성을 높여 똑같은 switch 문을 다음과 같이 표현 가능하다. (C# 8.0 이상)

namespace HelloWorld
{
    class MainApp
    {
        enum ACT { ATTACK, DEFENSE, PATROL };

        static void Main(string[] args)
        {
            ACT myAct = ACT.ATTACK;
            string key;

            //switch (myAct)
            //{
            //    case ACT.ATTACK:
            //        key = "A";
            //        break;
            //    case ACT.DEFENSE:
            //        key = "D";
            //        break;
            //    case ACT.PATROL:
            //        key = "P";
            //        break;
            //    default:
            //        key = "INVALID";
            //        break;
            //}

            key = myAct switch
            {
                ACT.ATTACK => "A",
                ACT.DEFENSE => "D",
                ACT.PATROL => "P",
                _ => "INVALID"
            }; 


            Read();
        }
    }
}

 

 

foreach 문

C++의 range 기반 for 문과 유사하다. 각 배열의 원소를 처음부터 끝까지 순회하는 방법을 제공한다.

namespace HelloWorld
{
    class MainApp
    {

        static void Main(string[] args)
        {
            int[] arr = new int[] { 0, 1, 2, 3, 4 };

            foreach(int a in arr)
            {
                Console.WriteLine(a);
            }

            Read();
        }
    }
}

점프문

break, continue, goto, return, throw 등

 

C++에서 goto문도 비선호되었는데 코드 흐름을 복잡하게 만든다는 이유로 역시 선호되지 않는다.

중첩 for문을 한번에 나올때 사용될 수 있다.

namespace HelloWorld
{
    class MainApp
    {
        static void Main(string[] args)
        {
            for(int i =0; i < 100; ++i)
            {
                for(int j = 0; j < 100; ++j)
                {
                    for(int k = 0; k < 100; ++k)
                    {
                        if (k == 50)
                            goto EXIT_LOOP;
                    }
                }
            }

        EXIT_LOOP:
            Console.WriteLine("Exit Loop");

            Read();
        }
    }
}

'C# > C# 기본' 카테고리의 다른 글

[C#] 클래스  (0) 2021.10.06
[C#] 메서드  (0) 2021.10.05
[C#] 연산자  (0) 2021.10.02
[C#] 문자열  (0) 2021.10.02
[C#] 기본 자료형  (0) 2021.09.30