개발바닥 아방수

[class] C# - enums (이넘) - 상수 열거형 클래스 본문

웹 개발/C#

[class] C# - enums (이넘) - 상수 열거형 클래스

앙큼아기 2022. 11. 22. 13:01

목차

enum 정의
enum과 class와의 유사점/차이점
enum values (값)
enum 예제1 - Class 안의 enum
enum 예제2 - Switch 구문 안의 enum
enum 예제3 - enum 이용한 반복문

 


enum 정의

상수를 콤마( , )로 모아놓은 열거형 "클래스".

※ 변경 불가한 읽기 전용 깂 (예: 날짜, 색깔 등) 모아 관리 시 유용. 
※ 특히, int, bytes 등 정수형 상수 정의 시 유용.

[특징]
1. enum : enumerations (= 구체적으로 나열) 의미.
2. const 키워드로 정의하는 상수처럼 변경 불가.
3. Class와 유사점・차이점 있음. (아래에서 설명.)
4. 각 상수에 대해서 개별 속성값 지정도 가능.
5. 다른 Class 안에서 사용 가능. (예제1)
6. Switch 구문 안에서도 사용 가능. (예제2)
6. 반복문에서도 사용 가능. (예제3)

[예제] Program.cs

using System;
namespace Homzzang
{
  enum Code
  {
    HTML,
    CSS,
    JS
  }

  class Program
  {
    static void Main(string[] args)
    {
      Code myCode = Code.CSS;
      Console.WriteLine(myCode);
    }
  }
}

결과값: CSS

 


enum과 class와의 유사점/차이점

[Class와 유사점]
(속성・메서드・생성자) 보유 가능.


[Class와 차이점]
1.
enum 상수들은 public, static, const 성격 띔.
즉, 변경 불가. = 덮어쓰기 불가. = 재정의 불가.
2.
enum은 객체 생성 불가.

 


enum values (값)

1.
enum 안 각 요소는 0부터 정수 색인 배정. 
2.
enum 안 요소에서 정수 얻으려면, 
명시적으로 int 자료형으로 변환해야 함. (예제1)
3.
enum 안 특정 요소에 사용자 정의 정수 배정 가능하며,
그에 따라 그 이후 요소 색인은 자동 업그레이드 됨. (예제2)

 

[예제1]

using System;

namespace Homzzang
{
  class Program
  {
    enum Months
    {
      Jan, // 0
      Feb, // 1
      Mar, // 2
      Apr, // 3
      May, // 4
      Jun, // 5
      Jul  // 6
    }

    static void Main(string[] args)
    {
      int num = (int) Months.Feb;
      Console.WriteLine(num);
    }
  }
}


[예제2] 사용자 정의 정수 배정 가능하며, 그 이후는 자동 증가.

using System;

namespace Homzzang
{
  class Program
  {
    enum Months
    {
      Jan, // 0
      Feb=2, // 2
      Mar, // 3
      Apr, // 4
      May, // 5
      Jun, // 6
      Jul  // 7
    }

    static void Main(string[] args)
    {
      int num = (int) Months.May;
      Console.WriteLine(num);
    }
  }
}

결과값: 5

 


enum 예제1 - Class 안의 enum

enum은 다른 클래스 안에서도 사용 가능.

 

[예제] Program.cs 

using System;

namespace Homzzang
{
  class Program
  {
    enum Code
    {
      HTML,
      CSS,
      JS
    }

    static void Main(string[] args)
    {
      Code myCode = Code.CSS;
      Console.WriteLine(myCode);
    }
  }
}

결과값: CSS

 


enum 예제2 - Switch 구문 안의 enum

enum은 switch 구문 안에서도 사용 가능.

※ 상응하는 값을 찾기 위해 자주 사용됨.

[예제] Program.css

using System;

namespace Homzzang
{
  class Program
  {
    enum Code
    {
      HTML,
      CSS,
      JS
    }

    static void Main(string[] args)
    {
      Code myCode = Code.CSS;
      switch(myCode) 
      {
        case Code.HTML:
          Console.WriteLine("HTML : 뼈대");
          break;
        case Code.CSS:
          Console.WriteLine("CSS : 디자인");
          break;
        case Code.JS:
          Console.WriteLine("JS : 기능");
          break;
      }    
    }
  }
}


결과값:
CSS : 디자인

 

 


enum 예제3 - enum 이용한 반복문

foreach (... in ...) 반복문 이용해 접근 가능.

Enum.GetValues() 메서드는 enum 안 각 상수에 접근.

※ 반복문 돌릴 때  아주 유용.

 

[구문]

foreach (enum var in Enum.GetValues(typeof(enum)))
   var 출력.
}

PS.
※ enum : enum명.
※ var : 변수명. (※ enum 안의 각 상수를 담는 변수)


[예제] Program.cs

using System;

namespace Homzzang
{
    class Program
    {
        enum Code
        {
            HTML,
            CSS,
            JS
        }

        static void Main(string[] args)
        {
            foreach (Code i in Enum.GetValues(typeof(Code)))
            {
                Console.WriteLine(i);
            }
        }
    }
}

결과값:
HTML
CSS
JS

 

 

(참고출처) https://homzzang.com/b/cs-36