C# Enum(열거)(예제 포함)

⚡ 스마트 요약

C#의 열거형은 요일과 같은 상수 정수 집합을 정의하여 코드를 더 쉽게 읽고 유지 관리할 수 있도록 합니다. `enum` 키워드를 사용하면 이러한 고정 상수를 한 번만 선언하여 프로그램 전체에서 재사용할 수 있습니다.

  • 📐 정의: enum 키워드는 관련된 명명된 상수를 하나의 유형으로 그룹화하여, 흩어져 있는 매직 넘버를 읽기 쉬운 식별자로 대체합니다.
  • 🗓️ 일별 예시: Days라는 열거형에는 요일이 저장되고, Days.Sun은 이름으로 선택된 멤버를 반환합니다.
  • 🔢 기본 가치: 열거형 멤버는 사용자 지정 숫자가 할당되지 않은 한 0부터 시작하여 1씩 증가하는 정수 값에 매핑됩니다.
  • 🔁 전환 : 명시적 형변환은 열거형을 정수로 변환하는 반면, Enum.Parse와 Enum.TryParse는 텍스트를 다시 멤버로 변환합니다.
  • 🚩 플래그 : Flags 속성을 사용하면 하나의 열거형으로 여러 옵션을 비트 OR 연산자를 사용하여 비트 필드로 결합할 수 있습니다.
  • 🤖 AI 지원: GitHub Copilot과 ML.NET은 열거형 정의를 생성하고 열거형을 머신러닝 기능에 매핑하는 데 도움을 줍니다.

C# 열거형(Enumeration)

C# 열거

열거형은 모든 프로그래밍 언어에서 상수 값 집합을 정의하는 데 사용됩니다. 예를 들어, 요일은 열거형으로 정의되어 프로그램의 어느 곳에서나 사용될 수 있습니다. C#에서는 열거형이 'enum' 키워드를 사용하여 정의됩니다.

'enum' 키워드를 사용하는 방법의 예를 살펴보겠습니다.

이 예에서는 요일을 저장하는 데 사용되는 days라는 열거형을 정의합니다. 각 예에서 Program.cs 파일의 기본 기능만 수정하겠습니다.

C# 열거

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code 설명:-

  1. '열거' 데이터 형식 열거형을 선언하도록 지정되었습니다. 열거형의 이름은 Days입니다. 모든 요일이 열거형 값으로 지정됩니다.
  2. 마지막으로 console.write 함수는 열거형 값 중 하나를 표시하는 데 사용됩니다.

위 코드를 올바르게 입력하여 프로그램이 성공적으로 실행되면 다음과 같은 출력이 표시됩니다.

출력:

C# 열거

출력에서 열거형의 'Sun' 값이 콘솔에 표시되는 것을 볼 수 있습니다.

C#에서 열거형(Enum)을 사용하는 이유는 무엇일까요?

열거형은 프로그램을 더 읽기 쉽고, 안전하며, 유지보수하기 쉽게 만들어 줍니다. 설명되지 않은 숫자(일명 매직 넘버)를 코드 곳곳에 흩뿌리는 대신, 열거형은 각 값에 그 용도를 명확하게 나타내는 설명적인 이름을 부여합니다.

  • 가독성 : Days.Fri와 같은 이름은 숫자 5보다 훨씬 명확하기 때문에 코드를 읽는 사람은 누구나 그 의미를 즉시 이해할 수 있습니다.
  • 유형 안전: 열거형으로 선언된 변수는 정의된 멤버 중 하나만 저장할 수 있으므로 유효하지 않은 값이 저장되는 것을 방지합니다.ping 인치
  • 유지보수성: 관련 상수들은 한 곳에 저장되어 있으므로, 값을 추가하거나 이름을 변경하면 프로그램 전체가 일관되게 업데이트됩니다.
  • 데이터 바인딩: WPF 및 ASP.NET과 같은 프레임워크는 열거형을 드롭다운 목록에 바인딩할 수 있으므로 열거형은 사용자 인터페이스를 구축하는 데 유용합니다.

컴파일러는 모든 할당을 허용된 멤버와 비교하여 검사하기 때문에 열거형은 프로그램 실행 전에 오류를 조기에 발견하는 데에도 도움이 됩니다.

C# 열거형에 사용자 지정 값 할당하기

C#에서는 기본적으로 첫 번째 열거형 멤버에 0을 할당하고 그 뒤를 잇는 각 멤버에 1씩 값을 더합니다. 위의 Days 열거형에서 Sun은 0, Mon은 1, Sat은 6입니다. 이러한 기본값을 재정의하려면 명시적으로 숫자를 할당할 수 있습니다.

  • 명시적 값: enum Level {Low = 1, Medium = 5, High = 10}과 같이 작성하면 각 멤버가 기본 순서 대신 선택한 숫자로 설정됩니다.
  • 부분 과제: 일부 멤버에만 값을 할당하면 컴파일러는 마지막으로 할당된 값부터 이후 멤버에 번호를 매깁니다.
  • 기본 유형: 열거형은 기본적으로 멤버를 정수형으로 저장하지만, 메모리를 절약하거나 범위를 확장하기 위해 바이트, 쇼트 또는 롱을 기반으로 할 수도 있습니다.

사용자 지정 값은 숫자가 데이터베이스 코드나 프로토콜 상수와 같은 외부 시스템과 일치해야 할 때 유용하며, 이를 통해 열거형이 실제 데이터를 정확하게 반영할 수 있습니다.

C# 열거형을 정수, 문자열 및 플래그로 변환하는 방법

C#에서는 열거형 값을 숫자로 저장하거나 텍스트에서 읽어오는 등 다른 형식으로 변환해야 하는 경우가 많습니다. 이러한 변환은 몇 가지 표준적인 방법으로 이루어집니다.

  • 열거형을 정수로 변환: (int)Days.Wed와 같은 명시적 형변환은 기본 정수 값을 반환하므로 저장이나 연산에 유용합니다.
  • 정수를 열거형으로 변환: 반대 방향으로 캐스팅하면, 예를 들어 (Days)3과 같이 숫자가 해당 열거형 멤버로 다시 변환됩니다.
  • 문자열을 열거형으로 변환: Enum.Parse와 더 안전한 Enum.TryParse는 "Fri"와 같은 이름을 유효하지 않은 텍스트에 대한 예외 없이 Days.Fri 멤버로 변환합니다.
  • 열거형을 문자열로 변환: 멤버에 대해 ToString을 호출하면 해당 멤버의 이름이 반환되므로 Days.Sun.ToString()은 표시 또는 로깅을 위해 "Sun"을 반환합니다.
  • 회원 목록: Enum.GetValues와 Enum.GetNames는 모든 값이나 이름을 반환하므로 메뉴를 채우거나 입력 유효성을 검사할 때 유용합니다.

열거형이 단일 선택이 아닌 여러 선택의 조합을 나타내야 하는 경우, `Flags` 속성을 적용하고 각 멤버에 1, 2, 4, 8과 같은 2의 거듭제곱 값을 부여합니다. 그런 다음 비트 OR 연산자를 사용하여 멤버들을 조합하고 `HasFlag` 메서드를 사용하여 특정 옵션이 있는지 확인할 수 있습니다.

이러한 변환 기법을 통해 열거형은 읽기 쉬운 이름, 저장된 숫자 및 결합된 플래그 세트 간에 깔끔하게 이동할 수 있습니다.ping 프로그램의 나머지 부분은 타입 안정성이 보장되고 이해하기 쉽습니다.

자주 묻는 질문

열거형 변수는 기본값으로 0을 가지며, 해당 값은 0인 멤버에 매핑됩니다. 만약 어떤 멤버도 0이 아니면 변수는 여전히 0을 유지하므로, 개발자들은 혼동을 피하기 위해 먼저 None 또는 Unknown 멤버를 정의하는 경우가 많습니다.

`const`는 하나의 명명된 값을 정의하는 반면, `enum`은 관련된 명명된 상수들을 하나의 타입으로 묶습니다. 또한 `enum`은 변수가 열거형에 정의된 멤버 중 하나만 저장할 수 있으므로 타입 안정성을 제공합니다.

예. 열거형은 네임스페이스 내부에 선언하거나 클래스 또는 구조체 내부에 중첩하여 선언할 수 있으며, 이 경우 해당 형식으로만 사용 범위가 제한됩니다. 하지만 C#에서는 메서드 본문 내부에 열거형을 선언하는 것은 허용되지 않습니다.

예. 두 개 이상의 멤버가 동일한 기본 번호를 공유할 수 있으며, 이 경우 나중에 추가된 이름은 처음 추가된 이름의 별칭이 됩니다. 비교 시에는 이들을 동일한 것으로 간주하며, 해당 값을 문자열로 변환하면 열거형에서 먼저 정의된 이름이 반환됩니다.

열거형은 값 형식이기 때문에 힙에 참조로 저장하는 대신 데이터를 직접 저장합니다. System.Enum을 상속받지만 내부적으로는 정수형처럼 동작하므로 열거형 값을 복사하고 비교하는 속도가 빠릅니다.

네. ML.NET에서는 열거형을 범주형 특성이나 레이블에 매핑할 수 있으며, 일반적으로 정수 값으로 변환하거나 원핫 인코딩을 사용합니다. 강력한 형식의 열거형을 사용하면 머신 러닝 파이프라인의 입력 열을 명확하고 일관되게 유지할 수 있습니다.

예. GitHub Copilot은 Visual Studio 내에서 완전한 열거형 정의, 사용자 지정 값, 플래그 속성 및 Enum.TryParse와 같은 변환 도우미를 제안합니다. VS Code. RevCopilot이 도메인에 맞지 않는 값이나 이름을 선택할 수 있으므로 각 제안을 검토하십시오.

주어진 숫자나 이름이 정의된 멤버와 일치하는 경우 true를 반환하는 Enum.IsDefined 메서드를 사용하세요. 이 메서드를 Enum.TryParse와 함께 사용하면 텍스트를 열거형 값으로 변환하기 전에 사용자 입력을 안전하게 검증할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.