enum
선언 및 기본 사용)enum Color
{
// 값을 지정해주지 않으면 첫 번째는 0이 되고 이후로 1씩 증가
Red, Green, Blue, SIZE
};
struct ColorStruct
{
int red;
int green;
int blue;
};
enum TextAttribute
{
Bold = 1,
Underline = 2,
Italic = 4,
Strikethrough = 8
};
enum CircleAttribute
{
//Bold = 1 // Unscoped Enum 의 경우 TextAttribute::Bold 와 이름이 겹쳐서 사용할 수 없다.
};
enum struct ScopedTextAttribute
{
Bold = 1,
Underline = 2,
Italic = 4,
Strikethrough = 8
};
enum class ScopedCircleAttribute
{
Bold = 1 // ScopedEnum은 이름이 겹쳐도 가능
};
enum Overflow
{
Value0 = 100000000000
};
enum NotOverflow : uint64_t
{
Value1 = 100000000000
};
enum Color
를 선언합니다. 기본값을 지정하지 않으면 첫 번째 값은 0부터 시작하며, 이후 값들은 1씩 증가합니다.struct ColorStruct
를 선언하여 red
, green
, blue
를 멤버로 가집니다.enum TextAttribute
를 선언하여 비트 플래그로 사용할 값을 지정합니다.enum CircleAttribute
를 선언하였으나, Bold
값이 TextAttribute::Bold
와 충돌하기 때문에 주석 처리합니다.enum struct ScopedTextAttribute
와 enum class ScopedCircleAttribute
를 선언합니다. Scoped enum
은 이름 충돌을 방지할 수 있습니다.enum Overflow
와 enum NotOverflow
를 선언합니다. NotOverflow
는 uint64_t
로 크기를 지정합니다.enum
사용 예제)int main()
{
{
// 주석으로 RGB Index를 표현
// 0 : Red, 1 : Green, 2 :Blue
int colors[3] = { 255, 128, 64 };
cout << "Red : " << colors[0] << endl;
cout << "Green : " << colors[1] << endl;
cout << "Blue : " << colors[2] << endl;
// 상수로 RGB Index를 표현
const int red = 0;
const int green = 1;
const int blue = 2;
cout << "Red : " << colors[red] << endl;
cout << "Green : " << colors[green] << endl;
cout << "Blue : " << colors[blue] << endl;
// Unscoped enum 을 이용하여 RGB Index를 표현
cout << "Red : " << colors[Red] << endl;
cout << "Green : " << colors[Green] << endl;
cout << "Blue : " << colors[Blue] << endl;
}
colors
배열을 선언하고 초기화합니다.unscoped enum
을 사용하여 출력합니다. enum
을 사용하면 코드 가독성을 높일 수 있습니다.enum
과 struct
사용 예제) {
int colors[SIZE] = { 255, 128, 64 };
// Unscoped enum 을 이용하여 RGB 값의 평균
int total = 0;
for (int i = 0; i < SIZE; ++i)
{
total += colors[i];
}
int avg0 = total / SIZE;
cout << avg0 << endl;
// Struct를 이용하여 RGB 값의 평균
ColorStruct cs = { 255, 128, 64 };
int avg1 = (cs.red + cs.green + cs.blue) / 3;
cout << avg1 << endl;
}
colors
배열을 SIZE
로 초기화하고 enum
을 사용하여 RGB 값의 평균을 계산합니다.struct ColorStruct
를 사용하여 RGB 값을 초기화하고 평균을 계산합니다. {
// BitFlag 사용
int textAttrs = 0;
textAttrs |= Bold;
textAttrs |= Underline;
cout << textAttrs << endl;
if (textAttrs & Underline)
cout << "Underline" << endl;
}
int textAttrs
를 초기화합니다.Bold
와 Underline
속성을 추가합니다.Underline
속성을 확인합니다. {
Bold;
TextAttribute::Bold; // 범위 지정해서 사용 가능
ScopedTextAttribute::Bold; // 범위 지정을 반드시 해야 한다.
cout << Bold << endl;
cout << TextAttribute::Bold << endl;
cout << (int)ScopedTextAttribute::Bold << endl; // 강타입, 암시적으로 정수형으로 변환되지 않는다
// Unscoped enumeration 보다 Scoped enumeration 사용이 권장 된다
}
ScopedTextAttribute
는 반드시 범위를 지정해야 합니다.ScopedTextAttribute::Bold
는 명시적으로 정수형으로 변환해야 합니다. {
cout << Overflow::Value0 << endl;
cout << NotOverflow::Value1 << endl;
}
Overflow::Value0
와 NotOverflow::Value1
를 출력합니다.NotOverflow
는 uint64_t
로 크기를 지정하여 큰 값을 안전하게 저장할 수 있습니다. {
Color color = Color::Red; // 변수로 사용
if (color == Color::Red) // 비교문
{
cout << "Red" << endl;
}
}
{
Color color = (Color)0; // 정수를 enum으로 변환
if (color == Color::Red)
{
cout << "Red" << endl;
}
}
}
Color
열거형 변수를 선언하고 초기화합니다.열거형(enum
)은 상수 값을 그룹화하여 코드의 가독성을 높이고 오류를 줄이는 데 유용합니다. C++에서는 비범위 지정 열거형(unscoped enum
)과 범위 지정 열거형(scoped enum
)을 지원합니다. 비범위 지정 열거형은 기존의 C 스타일 열거형으로, 암시적으로 정수형으로 변환됩니다. 범위 지정 열거형(enum class
또는 enum struct
)은 이름 충돌을 방지하고 타입 안전성을 제공합니다. 또한, 비트 플래그를 사용하여 여러 속성을 효율적으로 관리할 수 있습니다. 열거형의 크기를 지정하여 큰 값을 안전하게 저장할 수 있습니다. 열거형을 사용하여 코드의 가독성을 높이고 유지 보수성을 향상시킬 수 있습니다.