다음을 통해 공유


열거형(F#)

열거형도 열거형, 레이블 값의 하위 집합에 할당 된 정수 계열 형식입니다. 리터럴 대신 열거형을 사용하여 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만들 수 있습니다.

type enum-name =
   | value1 = integer-literal1
   | value2 = integer-literal2
   ...

설명

열거형은 단순 값을 갖는 구별된 공용 구조체와 매우 비슷하지만 값을 지정할 수 있다는 점에서 차이가 있습니다. 값은 일반적으로 0 또는 1부터 시작하는 정수이거나 비트 위치를 나타내는 정수입니다. 열거형의 비트 위치를 나타내기 위해 사용 되는 경우 또한 사용 해야 해당 FlagsAttribute특성입니다.

열거형의 내부 형식은 사용되는 리터럴을 기준으로 결정되므로, 예를 들어 부호 없는 정수(uint32) 형식에 대해 1u, 2u 등과 같은 접미사가 있는 리터럴을 사용할 수 있습니다.

명명된 값을 참조할 때는 열거형 형식 자체의 이름을 한정자로 사용해야 합니다. 즉, 단순히 value1을 사용하는 대신 enum-name.value1을 사용해야 합니다. 이는 구별된 공용 구조체의 경우와 차이를 보이는 동작입니다. 열거형에는 항상 RequireQualifiedAccess 특성이 있기 때문입니다.

다음 코드에서는 열거형을 선언하고 사용하는 방법을 보여 줍니다.

// Declaration of an enumeration. 
type Color =
   | Red = 0
   | Green = 1
   | Blue = 2
// Use of an enumeration. 
let col1 : Color = Color.Red

다음 코드에서와 같이 적절한 연산자를 사용하여 열거형을 내부 형식으로 쉽게 변환할 수 있습니다.

// Conversion to an integral type. 
let n = int col1

열거되는 형식의 내부 형식은 sbyte, byte, int16, uint16, int32, uint32, int64, uint16, uint64 및 char 중 하나가 될 수 있습니다. .NET Framework에서 열거형 형식은 ValueType으로부터 상속되는 Enum에서 상속된 형식으로 표현됩니다. 따라서 이는 포함 개체의 스택이나 인라인에 있는 값 형식이며, 내부 형식의 값은 무엇이든 열거형의 값이 될 수 있습니다. 열거형 값에 대한 패턴 일치를 수행할 때는 명명되지 않은 값을 캐시하는 패턴을 제공해야 하므로 이 사실이 특히 중요합니다.

값이 미리 정의하여 명명된 값 중 하나가 아니더라도 F# 라이브러리의 enum 함수를 사용하여 열거형 값을 생성할 수 있습니다. enum 함수를 사용하는 방법은 다음과 같습니다.

let col2 = enum<Color>(3)

기본 enum 함수에는 int32 형식이 사용됩니다. 따라서 내부 형식이 이와 다른 열거형 형식에는 이 함수를 사용할 수 없습니다. 대신 다음과 같은 방법을 사용해야 합니다.

type uColor =
   | Red = 0u
   | Green = 1u
   | Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)

참고 항목

개념

캐스팅 및 변환(F#)

기타 리소스

F# 언어 참조