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

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

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

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

=== 파스칼 ===
[[파스칼 (프로그래밍 언어)|파스칼]]에서 열거형은 괄호 목록에 값을 나열함으로써 내재적으로 선언할 수 있다:
  <syntaxhighlight lang=Pascal>
  var
    suit: (clubs, diamonds, hearts, spades);
  </syntaxhighlight>
이 선언은 형 동의어 선언에 등장할 수 있으며 이를 통해 여러 변수에 사용할 수 있다:

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

=== 에이다 ===
[[에이다 (프로그래밍 언어)|에이다]]에서 "="의 사용은 "is"로 대체된다:

 <syntaxhighlight lang=Ada>type Cardsuit is (clubs, diamonds, hearts, spades);</syntaxhighlight>

== C 및 구문적으로 유사한 언어 ==
=== C ===
원래의 [[C (프로그래밍 언어)|K&R]] 형태의 프로그래밍 언어인 [[C (프로그래밍 언어)|C]]는 열거형이 없었다. C에 대해 [[미국 국립 표준 협회|ANSI]] 표준에 추가되었으며 이것이 [[ANSI C]](C89)로 되었다. C에서 열거 항목들은 <code>enum</code> 키워드, [[struct]], [[유니언 타입|유니언]] 정의를 사용하는 명시적 정의로 만든다:

<syntaxhighlight lang=C>
enum cardsuit {
   Clubs,
   Diamonds,
   Hearts,
   Spades
};

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

enum cardsuit trump;
</syntaxhighlight>

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

<syntaxhighlight lang=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
</syntaxhighlight>

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

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

<syntaxhighlight lang=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>
</syntaxhighlight>

== 외부 링크 ==
{{위키책|Ada Programming|Types/Enumeration|Enumeration}}
* [http://www.cppreference.com/keywords/enum.html Enumerated types in C/C++]
* [http://msdn.microsoft.com/en-us/library/cc138362.aspx Enumerated types in C#]
* [http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html Enumerated types in Java]
* [http://dev.mysql.com/doc/refman/5.1/en/enum.html Enumerated types in MySQL]
* [https://archive.today/20130201203915/http://www.rps-obix.com/docs/manuals/enumerated_data_type.html Enumerated types in Obix]
* [http://www.w3.org/TR/xmlschema-2/ Enumerated types in XML]
* [http://msdn.microsoft.com/en-us/library/93khb7k9.aspx Enumerated types in Visual Basic]

{{자료형}}

[[분류:자료형]]
[[분류:유형 이론]]