열거형

컴퓨터 프로그래밍에서 열거형(, enumeration), 이넘(enum), 팩터(factor ← R 프로그래밍 언어와 통계학의 범주형 변수에서 부르는 명칭)는 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다.

일부 열거자 자료형은 언어에 기본 소속되어 있을 수 있다. 불리언 자료형을 예로 들면 거짓(False)과 참(True)의 값이 미리 정의된 열거형으로 볼 수 있다. 수많은 언어는 사용자들이 새로운 열거형을 정의할 수 있게 하고 있다.

열거형의 값과 변수는 일반적으로 고정 길이의 비트 문자열로 구현되며 이는 일부 정수형과 호환되는 포맷과 크기로 되어 있다. 특히 시스템 프로그래밍 언어와 같은 일부 언어들은 사용자가 각각의 열거자를 위해 사용할 비트 결합을 지정할 수 있게 한다.

파스칼 및 구문적으로 유사한 언어

파스칼 
파스칼에서 열거형은 괄호 목록에 값을 나열함으로써 내재적으로 선언할 수 있다:
    var
    suit: (clubs, diamonds, hearts, spades);
  
이 선언은 형 동의어 선언에 등장할 수 있으며 이를 통해 여러 변수에 사용할 수 있다:

  type
    cardsuit = (clubs, diamonds, hearts, spades);
    card = record
             suit: cardsuit;
             value: 1 .. 13;
           end;
  var
    hand: array [ 1 .. 13 ] of card;
    trump: cardsuit;

에이다 
에이다에서 "="의 사용은 "is"로 대체된다:

 type Cardsuit is (clubs, diamonds, hearts, spades);

C 및 구문적으로 유사한 언어

C 
원래의 K&R 형태의 프로그래밍 언어인 C는 열거형이 없었다. C에 대해 ANSI 표준에 추가되었으며 이것이 ANSI C(C89)로 되었다. C에서 열거 항목들은 enum 키워드, struct, 유니언 정의를 사용하는 명시적 정의로 만든다:

enum cardsuit {
   Clubs,
   Diamonds,
   Hearts,
   Spades
};

struct card {
   enum cardsuit suit;
   short int value;
} hand[13];

enum cardsuit trump;

펄 
C의 문법 전통을 따르는 동적 자료형 언어(예: 펄, 자바스크립트)들은 일반적으로 열거를 제공하지 않는다. 그러나 펄에서는 스트링 리스트와 해시를 사용하여 동일한 결과를 나타낼 수 있다.

my @enum = qw(Clubs Diamonds Hearts Spades);
my( %set1, %set2 );
@set1{@enum} = ();          # all cleared
@set2{@enum} = (1) x @enum; # all set to 1
$set1{Clubs} ...            # false
$set2{Diamonds} ...         # true

데이터베이스 
일부 데이터베이스는 열거형을 직접 지원한다. MySQL은 테이블을 만들 때 문자열로 지정된 허용 가능한 값에 대해 ENUM 열거형을 제공한다.

XML 스키마 
XML 스키마는 다음과 같이 열거형을 지원한다.

<xs:element name="cardsuit">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="Clubs"/>
      <xs:enumeration value="Diamonds"/>
      <xs:enumeration value="Hearts"/>
      <xs:enumeration value="Spades"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

외부 링크 

 Enumerated types in C/C++
 Enumerated types in C#
 Enumerated types in Java
 Enumerated types in MySQL
 Enumerated types in Obix
 Enumerated types in XML
 Enumerated types in Visual Basic

자료형
유형 이론