본문 바로가기

C, C++

열거형

열거형은 변수 타입 중 하나로 다음과 같이 씁니다.

enum [(타입 이름)] {
	(멤버1)[=(값)],
    (멤버2)[=(값)],
    (멤버3)[=(값)],
    ...
}[(변수명)];
enum Fruit {
	APPLE,
    BANANA,
    GRAPE 
}fruit;
//Fruit fruit;도 가능

fruit = APPLE;//fruit = Fruit::APPLE;도 가능

이런 식으로 값의 종류가 숫자나 문자가 아닌 여러 멤버를 갖고 있습니다.

이 멤버들은 내부적으로는 숫자(int)로 취급됩니다.

이 멤버들에 =(값)을 하지 않으면 첫 번째 값은 0이 되고 그 뒤로 =(값)을 한 부분 또는 끝까지 1씩 증가합니다.

enum Animal {
	DOG,//0
    CAT,//1
    PIG = 3,//3
    COW//4
}animal;

열거형들은 기본값으로 int로 취급되지만 이를 바꾸긴 위해서

enum Animal :unsigned char {
	DOG,
    CAT,
    PIG,
    COW 
};

이렇게 뒤에 타입명을 붙여서 바꿀 수 있습니다. 단, 실수 등의 정수형이 아닌 타입은 사용할 수 없고, unsigned (타입)으로 바꾸고 멤버 값에 음수가 포함되면 예기치 못한 값이 될 수 있습니다.

 

그런데 여러 개의 열거형을 사용하면 이름이 겹칠 수 있는데 이에 따른 오류를 방지하기 위해서 enum class를 사용합니다. 이것은 C++11 이상부터 지원됩니다.

enum class Student {
	JAMES,
    DONALD,
    BROWN,
    TIMMY 
};

enum class Color { 
	RED,
    BLUE,
    BROWN, 
    BLACK 
}; 

Student student = Student::BROWN;
Color color = Color::BROWN;

 

enum과 달리 반드시 타입::멤버 형식으로 접근해야 되지만 그렇기 때문에 멤버 이름이 중복돼도 정상적으로 사용할 수 있습니다.

 

추가 : C언어에서는 구조체와 마찬가지로 열거형 변수를 정의할 때 앞에 enum을 붙여야 합니다. 

'C, C++' 카테고리의 다른 글

typedef  (0) 2019.12.24
함수 포인터  (0) 2019.12.22
#pragma warning  (2) 2019.12.20
#pragma once  (0) 2019.12.19
미리 정의된 매크로  (0) 2019.12.19