[C#] 열거형 enum 개념 및 사용법

[C#] 열거형 enum 개념 및 사용법

이번 글에서는 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을 추가하여 아래와 같이 리스트 박스를 추가해줍니다. 그리고 namelbWeek을 입력해줍니다.

우선 위에서 선언했던 일주일 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이 표현됩니다.
이 리스트를 선택했을 때 화면에 표시하기 위해 텍스트 박스를 하나 추가해줍니다. nametbSelect입니다.

그 다음 리스트박스의 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