열거형 (Enum) - 의미있는 상수
C#의 열거형(enum)은 관련된 이름 있는 상수들을 하나의 묶음으로 관리하기 위해 사용되는 특별한 값 형식입니다.
열거형을 사용하면 코드의 가독성을 높이고, 특정 값들이 가지는 의미를 명확하게 전달할 수 있습니다.
열거형의 정의 및 특징
- 열거형 정의: 열거형은 여러 상수 값을 묶어 하나의 타입으로 정의하는 것을 의미합니다. 열거형의 각 상수는 고유한 이름과 값을 가집니다.
- 타입 안전성: 열거형을 사용하면 코드에서 잘못된 상수 값을 사용하는 실수를 줄일 수 있습니다. 예를 들어, 정수 대신 열거형 타입을 사용하면 컴파일러가 타입 불일치를 감지하여 오류를 방지할 수 있습니다.
- 가독성: 상수 값에 의미 있는 이름을 붙임으로써 코드의 가독성을 높입니다. 예를 들어, 숫자 ‘1’ 대신 DaysOfWeek.Monday를 사용하면 의미를 더 쉽게 이해할 수 있습니다.
- 유지보수성: 열거형을 사용하면 새로운 상수를 추가하거나 기존 상수를 변경하는 작업이 더 간편해집니다.
열거형 사용
열거형 정의
열거형은 enum
키워드를 사용하여 정의됩니다.
기본적으로 열거형의 기본 형식은 int
이며, 각 열거형 멤버는 0부터 시작하는 정수 값으로 자동 할당됩니다. 그러나 시작 값을 지정하거나 특정 값을 할당할 수도 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public enum DaysOfWeek
{
Sunday = 1, // 시작 값 1 지정
Monday, // 자동으로 2 할당
Tuesday, // 자동으로 3 할당
Wednesday, // 자동으로 4 할당
Thursday, // 자동으로 5 할당
Friday, // 자동으로 6 할당
Saturday // 자동으로 7 할당
}
static void Main(string[] args)
{
for (int i = 1; i <= 7; i++)
{
Console.WriteLine($"{(DaysOfWeek)i} = {i}");
}
}
열거형 변수와 멤버 접근 연산자
열거형은 변수로 사용할 수 있으며, 열거형 멤버를 할당하거나 멤버 접근 연산자(.
)로 멤버에 해당하는 상수를 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public enum DaysOfWeek
{
Sunday = 1,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
static void Main(string[] args)
{
DaysOfWeek input = (DaysOfWeek)Convert.ToInt32(Console.ReadLine());
switch (input)
{
case DaysOfWeek.Sunday:
Console.WriteLine("일요일");
break;
case DaysOfWeek.Monday:
Console.WriteLine("월요일");
break;
case DaysOfWeek.Tuesday:
Console.WriteLine("화요일");
break;
case DaysOfWeek.Wednesday:
Console.WriteLine("수요일");
break;
case DaysOfWeek.Thursday:
Console.WriteLine("목요일");
break;
case DaysOfWeek.Friday:
Console.WriteLine("금요일");
break;
case DaysOfWeek.Saturday:
Console.WriteLine("토요일");
break;
default:
Console.WriteLine("잘못된 입력");
break;
}
}
열거형의 기본 형식 변경
기본적으로 열거형의 기본 형식은 int
이지만, 다른 정수 형식(byte
, sbyte
, short
, ushort
, uint
, long
, ulong
)으로 변경할 수 있습니다.
1
2
3
4
5
6
public enum ByteEnum : byte
{
First = 1,
Second = 2,
Third = 3
}
다양한 열거형의 메서드
C#의 열거형은 Enum 클래스에서 제공하는 다양한 유틸리티 메서드를 사용할 수 있습니다.
예를 들어, Enum.Parse
, Enum.TryParse
, Enum.GetNames
, Enum.GetValues
등이 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 문자열을 열거형으로 변환
string dayString = "Friday";
DaysOfWeek day = (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayString);
Console.WriteLine(day); // 출력: Friday
// 안전하게 열거형으로 변환 시도
if (Enum.TryParse("Monday", out DaysOfWeek result))
{
Console.WriteLine(result); // 출력: Monday
}
else
{
Console.WriteLine("잘못된 입력");
}
// 열거형의 모든 값 가져오기
DaysOfWeek[] days = (DaysOfWeek[])Enum.GetValues(typeof(DaysOfWeek));
foreach (DaysOfWeek d in days)
{
Console.WriteLine(d);
}
// 열거형의 모든 이름 가져오기
string[] dayNames = Enum.GetNames(typeof(DaysOfWeek));
foreach (string name in dayNames)
{
Console.WriteLine(name);
}
플래그 열거형
때로는 열거형을 비트 플래그로 사용하고 싶을 때가 있습니다. 이 경우 [Flags]
특성을 사용할 수 있습니다.
이때, 비트로 다루고자 하면, 각 열거형 값이 2진법에서 비트 단위로 다루어져야 하므로, 값 할당을 2의 거듭제곱으로 해야 합니다.
1
2
3
4
5
6
7
8
9
10
11
[Flags]
public enum FileAccess
{
None = 0, // 0000
Read = 1, // 0001
Write = 2, // 0010
Execute = 4, // 0100
Delete = 8, // 1000
ReadWrite = Read | Write, // 0011 (Read + Write)
All = Read | Write | Execute | Delete // 1111 (모든 권한)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 여러 플래그 결합
FileAccess access = FileAccess.Read | FileAccess.Write;
Console.WriteLine(access); // 출력: ReadWrite
// 특정 플래그가 설정되었는지 확인
bool canWrite = (access & FileAccess.Write) == FileAccess.Write;
Console.WriteLine(canWrite); // 출력: True
bool canExecute = (access & FileAccess.Execute) == FileAccess.Execute;
Console.WriteLine(canExecute); // 출력: False
// 플래그 제거
access &= ~FileAccess.Write;
Console.WriteLine(access); // 출력: Read
// 모든 플래그 설정
access = FileAccess.All;
Console.WriteLine(access); // 출력: All
이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.