열거형(F#)

enums로도 알려진 열거형은 명명된 정의된 값 집합을 가지는 형식입니다. 리터럴 대신 열거형을 사용하여 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만들 수 있습니다.

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

설명

열거형은 단순 값을 갖는 구별된 공용 구조체와 매우 비슷하지만 값을 지정할 수 있다는 점에서 차이가 있습니다. 값은 일반적으로 0 또는 1부터 시작하는 정수이거나 비트 위치를 나타내는 정수입니다. 열거형의 내부 형식은 사용되는 리터럴을 기준으로 결정되므로, 예를 들어 부호 없는 정수(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# 언어 참조