[C#] 06. 제어문


Study/C#  2020. 6. 29. 18:45

안녕하세요. 명월입니다.


이 글은 C#의 제어문에 대한 글입니다.


제어문이란 프로그램의 처리 수행 순서를 제어하거나 수행 횟수를 결정하는 것을 뜻합니다.

쉽게 설명하면, 프로그램 코드는 기본적으로 위에서 아래로 처리됩니다. 그러나 단순히 위에서 아래로 처리되는 흐름 중에 다시 반복해야할 구문이 있을 수도 있고, 처리를 건너 뛰어야 할 부분 또는 생략해야 할 부분이 있을 수 있습니다.

이런 것을 반복하고 건너 뛰거나 생략하는 처리를 제어문이라고 합니다.


제어문은 선택문, 반복문, 분기문이 있습니다.

선택문이란 조건에 따라 명령을 처리하는 문법입니다. 종류는 if~else문, switch~case문이 있습니다.

반복문이란 일정한 조건이 만족할 때까지 같은 명령을 반복적으로 처리하는 문법입니다. 종류는 for문, while문, do~while문, foreach문이 있습니다.

분기문이란 명령어의 처리 순서를 바꾸는 문법입니다. break문과 continue문이 있습니다.


if ~ else

- if~else 문은 참, 거짓에 따라 처리하는 제어문입니다.

① if(조건) => 조건이 참(true)이면 "처리 스택"을 실행한다.
    처리 스택;

② if(조건) => 조건이 참(true)이면 "처리 스택 1"을 실행한다.
    처리 스택 1;
  else => 거짓(false)이면 "처리 스택 2"를 실행한다.
    처리 스택 2;

③ if(조건1) => 조건1이 참(true)이면 "처리 스택 1"을 실행한다.
    처리 스택 1;
  else if(조건2) => 조건1이 거짓(false)이고 조건2가 참(true)이면 "처리 스택 2"를 실행한다.
    처리 스택 2;
  else => 조건1과 조건2가 둘 다 거짓이면 "처리 스택 3"을 실행하라.
    처리 스택 3;

if문의 조건이 참(true)이면 해당 스택을 실행하는 구조입니다. 마지막에 else가 있으면 모두 거짓일 경우 else의 스택을 실행하면 됩니다.

using System;
namespace Example
{
  class Program
  {
    // 실행 함수
    static void Main(string[] args)
    {
      // 부울 값 설정 = true
      bool a = true;
      // 변수 a가 true면
      if (a)
      {
        // 콘솔 출력
        Console.WriteLine("first condition = true");
      }
      // 부울 값 설정 = false
      a = false;
      // 변수 a가 true면
      if (a)
      {
        // 콘솔 출력
        Console.WriteLine("second condition = true");
      }
      else
      {
        // 콘솔 출력
        Console.WriteLine("second condition = false");
      }
      // 변수 b에 값 2를 설정
      int b = 2;
      // 변수 b가 1이면
      if (b == 1)
      {
        // 콘솔 출력
        Console.WriteLine("third condition b = 1");
      }
      // 변수 b가 2이면
      else if (b == 2)
      {
        // 콘솔 출력
        Console.WriteLine("third condition b = 2");
      }
      // 변수 b가 1또는 2가 아니면
      else
      {
        // 콘솔 출력
        Console.WriteLine("third condition = false");
      }

      // 아무 키나 누르면 종료
      Console.WriteLine("Press any key...");
      Console.Read();
    }
  }
}

위 예제를 설명하면 첫번째 조건에서 a의 변수의 조건을 확인합니다.


a의 부울 값이 true라면 if(a)에 있는 스택 영역이 실행 될 것입니다. a라는 변수에 true를 넣었기 때문에 콘솔에 true라는 메시지가 표시됩니다.


두번째 조건식에서는 if ~ else 조건식인데 변수 a가 true면 첫번째 스택 영역을, false라면 else 밑의 스택 영역을 실행합니다.

두번째 조건식이 오기 전에 false로 설정했기 때문에 콘솔에는 false가 출력이 되었습니다.


세번째 조건식은 변수의 b의 값을 관계 연산자로 값의 true, false를 확인합니다.

b의 값을 2로 설정했기 때문에 if (b == 2)의 스택 영역이 실행되므로 콘솔에는 b = 2라는 값이 출력 되었습니다.


switch ~ case

switch ~ case는 선택문으로써 if ~ else if ~ else 와 비슷한 처리를 합니다.

switch(조건 변수)
{
  case 값1:
    처리 1;
    break;
  case 값2:
    처리 2;
    break;
  case 값3:
    처리 3;
    break;
  ...
  default:
    처리;
    break;
}

switch ~ case에서 중요한 점은 break입니다. switch의 조건 변수에 해당하는 값을 찾아 case로 찾아가는 데 break가 없으면 C#에서는 에러가 발생합니다.

using System;
namespace Example
{
  class Program
  {
    // 실행 함수
    static void Main(string[] args)
    {
      // 변수 data에 10을 설정
      int data = 10;
      // data의 조건 변수
      switch (data)
      {
        // data가 10인 경우
        case 10:
          // 콘솔 출력
          Console.WriteLine("data = 10");
          // switch 빠져나오기
          break;
        // data가 20인 경우
        case 20:
          // 콘솔 출력
          Console.WriteLine("data = 20");
          // switch 빠져나오기
          break;
        // case에서 선택되지 않았을 경우
        default:
          // 콘솔 출력
          Console.WriteLine("default");
          // switch 빠져나오기
          break;
      }
      // 아무 키나 누르면 종료
      Console.WriteLine("Press any key...");
      Console.Read();
    }
  }
}

for

- for문은 초기값부터 종료 조건이 거짓이 될 때까지 증감치를 변화시키며 반복적인 명령을 수행하는 제어문입니다.

for (초기값; 종료 조건; 증감치)
{
  문장;
}
using System;
namespace Example
{
  class Program
  {
    // 실행 함수
    static void Main(string[] args)
    {
      // 0부터 9까지 출력 반복
      for (int i = 0; i < 10; i++)
      {
        // 콘솔 출력
        Console.WriteLine(i);
      }
      // 아무 키나 누르면 종료
      Console.WriteLine("Press any key...");
      Console.Read();
    }
  }
}

while

- while문은 조건절이 참인 동안 지정된 문장을 반복합니다. for문에서 초기값과 증감치가 없는 반복문과 같습니다.

while(조건절)
{
  문장;
}
using System;
namespace Example
{
  class Program
  {
    // 실행 함수
    static void Main(string[] args)
    {
      // 조건 변수
      int i = 0;
      // 합산 변수
      int sum = 0;
      // sum이 100이 넘을 때까지 실행한다.
      while (sum < 100)
      {
        // 조건 변수 1 증가
        i++;
        // 합산 변수에 조건 변수값을 더한다.
        sum += i;
        // 콘솔 출력
        Console.WriteLine(sum);
      }
      // 아무 키나 누르면 종료
      Console.WriteLine("Press any key...");
      Console.Read();
    }
  }
}

do~while

- do~while문은 while문이랑 비슷하나 while은 처음부터 조건절을 검사하고 실행됩니다만 do~while문은 일단 한번 실행하고 조건절을 검사하는 것이 차이입니다.

do
{
  문장;
} while(조건절);
using System;
namespace Example
{
  class Program
  {
    // 실행 함수
    static void Main(string[] args)
    {
      // 조건 변수
      int i = 10;
      // 합산 변수
      int sum = 0;
      // 조건절에 조건이 맞지 않아도 일단 문장을 한번 실행한다.
      do
      {
        // 합산 변수에 조건 변수값을 더한다.
        sum += i;
        // 콘솔 출력
        Console.WriteLine(sum);
        // 조건 변수 1 증가
        i++;
      // sum이 5를 넘을 때까지 실행한다.	
      } while (sum < 5);
      // 아무 키나 누르면 종료
      Console.WriteLine("Press any key...");
      Console.Read();
    }
  }
}

foreach

- foreach는 iterator 패턴과 관계가 있는 반복문입니다.

배열이나 컬렉션의 객체(노드)를 가져오고 개수만큼 반복해서 사용하는 것입니다.

foreach(데이터 타입 in 배열)
{
  문장;
}
using System;
namespace Example
{
  class Program
  {
    // 실행 함수
    static void Main(string[] args)
    {
      // 배열 변수 선언
      int[] a = new int[5] { 1, 2, 3, 4, 5 };
      // a 배열에서 차례로 추출하면서 b의 변수에 넣는다.
      foreach (int b in a)
      {
        // 콘솔 출력
        Console.WriteLine(b);
      }
      // 아무 키나 누르면 종료
      Console.WriteLine("Press any key");
      Console.ReadLine();
    }
  }
}

break

- break 문은 반복문을 빠져 나올 때 사용하는 문법입니다.

using System;
namespace Example
{
  class Program
  {
    // 실행 함수
    static void Main(string[] args)
    {
      // 0부터 9까지 반복문
      for (int i = 0; i < 10; i++)
      {
        // 조건문의 i가 3일 경우
        if (i == 3)
        {
          // for 반복문을 빠져 나온다.
          break;
        }
        // 콘솔 출력
        Console.WriteLine(i);
      }
      // 아무 키나 누르면 종료
      Console.WriteLine("Press any key...");
      Console.ReadLine();
    }
  }
}

참고로 switch~case에서도 break문을 사용했습니다.


continue

- continue는 break와 비슷합니다. break는 반복문을 빠져나오는 기능이 있지만 continue는 반복문의 시작 지점으로 되돌리는 기능이 있습니다.

using System;
namespace Example
{
  class Program
  {
    // 실행 함수
    static void Main(string[] args)
    {
      // 0부터 9까지 반복문
      for (int i = 0; i < 10; i++)
      {
        // 조건문의 i가 짝수일 경우
        if (i % 2 == 0)
        {
          // 반복문 건너 뛰기
          continue;
        }
        // 콘솔 출력
        Console.WriteLine(i);
      }
      // 아무 키나 누르면 종료
      Console.WriteLine("Press any key...");
      Console.ReadLine();
    }
  }
}

여기까지 C#의 제어문에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.