이번 글에서는 C#에서 enum 사용법에 대해 알아보겠습니다.
개념
C#의 enum은 열거형 상수를 표현하기 위해 사용되는 키워드로, 단순하게 상수를 정의하는 것보다 의미 있는 정의를 하기 위해 사용되며 개발자 입장에서 개발 의도를 명백하게 해줍니다.
잘만 사용된다면
- 코드의 가독성과 유지보수성이 향상됩니다.
- 상수 값의 의미를 더 쉽게 이해할 수 있습니다.
- 잘못된 값을 입력하지 않도록 컴파일 단계에서 검사 됩니다.
사용법
enum은 네임스페이스, 클래스 내에서만 선언되며 enum 선언 시 특별한 값을 지정하지 않는다면 첫 번째 요소가 0으로 시작하여 1씩 증가 된 값을 할당 받습니다.
예를 들어 일주일을 enum으로 표현하면 아래와 같습니다.
public enum EN_WEEK
{
MON, // 월
TUE, // 화
WED, // 수
THUR, // 목
FRI, // 금
SAT, // 토
SUN, // 일
}
아래와 같이 값을 지정할 수도 있습니다.
public enum EN_WEEK
{
MON = 1, // 월
TUE, // 화
WED = 4, // 수
THUR, // 목
FRI, // 금
SAT, // 토
SUN, // 일
}
enum을 문자열로 표현하면 선언했던 그대로 표시됩니다.
string day_of_week = EN_WEEK.FRI.ToString(); // "FRI" 출력
반대로 문자열을 enum으로 변환할 수도 있습니다.
EN_WEEK day_of_week = Enum.Parse<EN_WEEK>("FRI"); // EN_WEEK.FRI 입력 됨
코드
이제 enum을 사용하여 아래와 같이 리스트 박스에 표현해보도록 하겠습니다.
C# Winform을 추가하여 아래와 같이 리스트 박스를 추가해줍니다. 그리고 name에 lbWeek을 입력해줍니다.
우선 위에서 선언했던 일주일 enum을 namespace 내부에 정의해줍니다.
public enum EN_WEEK
{
MON,
TUE,
WED,
THUR,
FRI,
SAT,
SUN,
}
그 다음 Form의 Load 이벤트에 아래와 같이 입력해줍니다.
private void Form1_Load(object sender, EventArgs e)
{
for (EN_WEEK enWeek = EN_WEEK.MON; enWeek <= EN_WEEK.SUN; enWeek++)
{
lbWeek.Items.Add(new ListWeekItem(enWeek));
}
}
ListWeekItem은 제가 만든 아이템인데, 아래와 같이 namespace 내부에 클래스를 추가합니다.
public class ListWeekItem : ListViewItem
{
public ListWeekItem(EN_WEEK enWeek)
{
Week = enWeek;
}
private EN_WEEK enWeek;
public EN_WEEK Week
{
set
{
enWeek = value;
switch (enWeek)
{
case EN_WEEK.SUN:
strDisp = "sunday";
break;
case EN_WEEK.MON:
strDisp = "monday";
break;
case EN_WEEK.TUE:
strDisp = "tuesday";
break;
case EN_WEEK.WED:
strDisp = "wednesday";
break;
case EN_WEEK.THUR:
strDisp = "thursday";
break;
case EN_WEEK.FRI:
strDisp = "friday";
break;
case EN_WEEK.SAT:
strDisp = "saturday";
break;
default:
strDisp = "UNKNOWN";
break;
}
}
get { return enWeek; }
}
private string strDisp = "";
public string Disp
{
get
{
return strDisp;
}
}
public override string ToString()
{
string strToString = string.Format("enum: {0}, Disp: {1}", Week, Disp);
return strToString;
}
}
여기까지만 해도 리스트박스에 enum이 표현됩니다.
이 리스트를 선택했을 때 화면에 표시하기 위해 텍스트 박스를 하나 추가해줍니다. name은 tbSelect입니다.
그 다음 리스트박스의 SelectedValueChanged 이벤트를 추가해주고 함수를 아래와 같이 정의해줍니다.
private void lbWeek_SelectedValueChanged(object sender, EventArgs e)
{
if (sender.Equals(lbWeek))
{
tbSelect.Text = lbWeek.Items[lbWeek.SelectedIndex].ToString();
}
}
빌드 하신 뒤 실행해 보시면 위와 동일한 프로그램이 실행됩니다.
이상으로 enum을 사용하여 리스트박스에 표시하는 프로그램을 만들어 보았습니다.
자세한 코드는 아래 깃헙 링크 참고하시기 바랍니다.
github: https://github.com/3001ssw/c_sharp/tree/main/Enum