Chapter 2-1. 코드의 흐름 제어 : switch, 열거형

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 강의 Part1: C# 기초 프로그래밍 입문 를 듣고 정리한 필기입니다. 😀

👱‍♀️ switch

  • if - else 반복 줄임
  • 가독성 높임
  • switch(n) 인수로는 기본적으로 정수와 문자를 넣을 수 있음
    • 최근 C# 에서는 다른 타입의 객체도 넣을 수 있게끔 개선됐다.
int choice = 0;

switch(choice)
{
    case 0:
        Console.WriteLine("가위");
        break;
    case 1:
        Console.WriteLine("바위");
        break;
    case 2:
        Console.WriteLine("보");
        break;
    default:
        Console.WriteLine("다 실패");
        break;
}
  • break에 걸리지 않으면 해당된 case에서부터 쭉쭉 다 실행한다. 해당 case만 실행 시킬 것이라면 break 꼭 명시.
    • breakswitch문을 벗어나는 것에 해당한다.
  • switch문으로 표현 한 것은 항상 if-else문으로도 표현할 수 있지만 그 반대는 항상 성립되는 것은 아니다. switch값에 따른 분기에만 한정 됨. 따라서 간단한 분기의 경우 가독성 좋은 switch를 권장. 복잡한 조건 분기의 경우 if-else문 사용하기.
  • switch문의 case 값으로는 ⭐일반 변수가 들어갈 순 없다.
    • 상수 리터럴이나 const 상수가 들어가야 한다.
    • 즉 실행 중에 값이 바뀔 수 있는 변수는 들어갈 수 없다.
    • 이와 달리 if-else문은 조건문에도 일반 변수를 사용할 수 있다. ```c# int ROCK = 1; const int PAPER = 2; switch(choice) { case ROCK: // 👉👉❌❌❌ 에러! case 엔 컴파일타임에 메모리가 결정되는 상수가 들어와야 한다. break;
      case PAPER: // ⭕ const 상수이므로 문제 없다. break; }

    ```


👱‍♀️ 열거형

열거형 👉 같은 종류의 상수 모음

  • 상수나 변수를 사용하는 이유
    • 상수 리터럴을 통한 하드 코딩은 그 의미를 알기 쉽지 않고 리팩토링이 어렵기 때문에.
  • enum 열거형을 사용하는 이유
    1. 상수이므로 의미를 알기 쉽다.
    2. 연관된 것들을 하나의 enum 으로 묶기 때문에 그룹화를 할 수 있다.
    3. 상수나 변수가 굉장히 많아지면 이름이 중복될 우려도 있는데 서로 다른 enum에 속하면 이름이 동일해도 전혀 다른 것으로 간주되기 때문에 이름 중복 우려를 방지할 수 있다.
        enum Choice
        {
            Rock,
            Paper,
            Scissors
        }

        static void Main(string[] args)
        {
  • 열거형 선언은 클래스처럼 함수 밖에서 선언되야 한다.
  • 내부적으론 정수가 저장된다.
    • 값이 입력 안되면 디폴트 값 0 에서 출발하여 0, 1, 2, 3, 이런식으로 저장된다. 이전 값에서 +1 한 값으로 설정된다.
    • 아래와 같이 직접 값을 명시해줄 수도 있다.
          enum Choice
          {
              Rock = 1,
              Paper,  // 자동으로 2가 된다. 이전 값이 1 이어서.
              Scissors = 0
          }
      
  • enum은 상수의 모음이기 때문에 case문에 사용할 수 있다.
  • Choice.Rock, Choice.Paper 이거 자체로는 정수타입이 아니라 enum 타입이기 때문에 (int)로 형 변환 해주어야 한다. ✔현재 switch 조건문의 choiceint형이니까 !!!
    • (int)Choice.Rock, (int)Choice.Paper
  int choice = 2;
  switch(choice)
  {
        case (int)Choice.Rock: 
            break;  
        case (int)Choice.Paper: 
            break;
  }

열거형 변수는 초기화 하지 않으면 자동으로 첫번째 값으로 초기화 한다.

        enum Choice
        {
            Rock = 1,
            Paper,  // 자동으로 2가 된다. 이전 값이 1 이어서.
            Scissors = 0
        }

        static void Main(string[] args)
        {
            Choice choice;  // 초기화 안했지만 자동으로 choice = Choice.Rock 이 됨.
        }


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

C Sharp 카테고리 내 다른 글 보러가기

댓글 남기기