달나라 노트

C# : enum (Enumeration, 열거체) 본문

C#/C#

C# : enum (Enumeration, 열거체)

CosmosProject 2022. 4. 1. 01:01
728x90
반응형

 

 

 

C#에는 enum 이라는 타입의 데이터가 있습니다.

enum은 Enumeration(열거체) 라고 합니다.

 

간단하게 말하면 array와 비슷한 형태의 자료형이라고 보면 됩니다.

다만 다음과 같은 특징이 있습니다.

 

1. 한 번 구성해두면 요소의 변경이 불가함. (이러한 특징 때문에 enum은 요일, 월 같이 절대 변하지 않는 array 선언 시에 자주 이용합니다.)

2. enum을 이용해서 객체 생성이 불가함.

3. index는 0부터 자동으로 배정되지만, 필요에 따라 정수 index를 원하는 대로 부여할 수 있음.

 

 

아래 코드를 봅시다.

 

using System;
using System.Windows.Forms;

class MyProgram
{
    enum Weekdays
    {
        Mon,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
        Sun
    }

    public static void Main()
    {
        Console.WriteLine(Weekdays.Mon);
        Console.WriteLine(Weekdays.Tue);
        Console.WriteLine(Weekdays.Wed);
        Console.WriteLine(Weekdays.Thu);
        Console.WriteLine(Weekdays.Fri);
        Console.WriteLine(Weekdays.Sat);
        Console.WriteLine(Weekdays.Sun);
    }
}


-- Result
Mon
Tue
Wed
Thu
Fri
Sat
Sun

enum을 생성하고 enum의 요소들을 가져오는 예시입니다.

 

 

 

    enum Weekdays
    {
        Mon,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
        Sun
    }

먼저 enum의 선언 부분입니다.

array와 동일하게 enum enum_name { 요소1, 요소2, 요소3, ... } 이러한 식으로 선언합니다.

단, 주의할 점은 enum은 array처럼 따로 어떤 변수에 할당해서 생성하는 것이 아니기 때문에 바로 enum_name에 enum이 생성됩니다.

 

위 예시는 Weekdays라는 이름의 enum이 생성된겁니다.

 

 

 

        Console.WriteLine(Weekdays.Mon);
        Console.WriteLine(Weekdays.Tue);
        Console.WriteLine(Weekdays.Wed);
        Console.WriteLine(Weekdays.Thu);
        Console.WriteLine(Weekdays.Fri);
        Console.WriteLine(Weekdays.Sat);
        Console.WriteLine(Weekdays.Sun);

생성된 enum인 Weekdays에서 각각의 요소에 접근하기 위해선 요소 이름을 마침표(.)로 구분하여 사용합니다.

Weekdays의 Mon 요소에 접근하고싶으면 Weekdays.Mon 이런식으로 쓴다는 의미이죠.

 

 

 

 

using System;
using System.Windows.Forms;

class MyProgram
{
    enum Weekdays
    {
        Mon,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
        Sun
    }

    public static void Main()
    {
        Weekdays weekday_0 = Weekdays.Mon;
        Weekdays weekday_1 = Weekdays.Tue;
        Weekdays weekday_2 = Weekdays.Wed;
        Weekdays weekday_3 = Weekdays.Thu;
        Weekdays weekday_4 = Weekdays.Fri;
        Weekdays weekday_5 = Weekdays.Sat;
        Weekdays weekday_6 = Weekdays.Sun;
        Console.WriteLine(weekday_0);
        Console.WriteLine(weekday_1);
        Console.WriteLine(weekday_2);
        Console.WriteLine(weekday_3);
        Console.WriteLine(weekday_4);
        Console.WriteLine(weekday_5);
        Console.WriteLine(weekday_6);
    }
}


-- Result
Mon
Tue
Wed
Thu
Fri
Sat
Sun

enum 타입의 Weekdays의 각 요소를 얻어올 때 위처럼 Weekdays 타입의 변수를 생성하고 그 변수에 enum 요소 정보를 할당할 수 있습니다.

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;

class MyProgram
{
    enum Weekdays
    {
        Mon,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
        Sun
    }

    public static void Main()
    {
        String weekday_0 = Weekdays.Mon.ToString();
        String weekday_1 = Weekdays.Tue.ToString();
        String weekday_2 = Weekdays.Wed.ToString();
        String weekday_3 = Weekdays.Thu.ToString();
        String weekday_4 = Weekdays.Fri.ToString();
        String weekday_5 = Weekdays.Sat.ToString();
        String weekday_6 = Weekdays.Sun.ToString();
        Console.WriteLine(weekday_0);
        Console.WriteLine(weekday_1);
        Console.WriteLine(weekday_2);
        Console.WriteLine(weekday_3);
        Console.WriteLine(weekday_4);
        Console.WriteLine(weekday_5);
        Console.WriteLine(weekday_6);
    }
}

Weekdays.Mon 과 같은 구문으로 return되는 값은 Mon 등으로 출력되었습니다.

마치 Weekdays.Mon으로 return되는 값이 각각의 요소를 String 타입으로 return해주는 것 같지만 아닙니다.

따라서 만약 각각의 요소를 String으로 받고 싶다면 위처럼 ToString method를 사용해야 합니다.

 

 

 

 

 

 

using System;
using System.Windows.Forms;

class MyProgram
{
    enum Weekdays
    {
        Mon,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
        Sun
    }

    public static void Main()
    {
        int weekday_number_0 = (int) Weekdays.Mon;
        int weekday_number_1 = (int) Weekdays.Tue;
        int weekday_number_2 = (int) Weekdays.Wed;
        int weekday_number_3 = (int) Weekdays.Thu;
        int weekday_number_4 = (int) Weekdays.Fri;
        int weekday_number_5 = (int) Weekdays.Sat;
        int weekday_number_6 = (int) Weekdays.Sun;
        Console.WriteLine(weekday_number_0);
        Console.WriteLine(weekday_number_1);
        Console.WriteLine(weekday_number_2);
        Console.WriteLine(weekday_number_3);
        Console.WriteLine(weekday_number_4);
        Console.WriteLine(weekday_number_5);
        Console.WriteLine(weekday_number_6);
    }
}


-- Result
0
1
2
3
4
5
6

enum의 각 요소들은 array처럼 첫 요소의 index = 0부터 시작해서 1씩 증가합니다.

enum의 각 요소에 대한 index를 얻으려면 (int) Weekdays.Mon 처럼 enum 객체에 접근한 후 int로 타입 변환을 해줘야 합니다.

그러면 Weekdays.Mon과 연결된 index가 return됩니다.

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;

class MyProgram
{
    enum Weekdays
    {
        Mon=5,
        Tue=7,
        Wed=10,
        Thu=13,
        Fri=20,
        Sat=364,
        Sun=700
    }

    public static void Main()
    {
        int weekday_number_0 = (int) Weekdays.Mon;
        int weekday_number_1 = (int) Weekdays.Tue;
        int weekday_number_2 = (int) Weekdays.Wed;
        int weekday_number_3 = (int) Weekdays.Thu;
        int weekday_number_4 = (int) Weekdays.Fri;
        int weekday_number_5 = (int) Weekdays.Sat;
        int weekday_number_6 = (int) Weekdays.Sun;
        Console.WriteLine(weekday_number_0);
        Console.WriteLine(weekday_number_1);
        Console.WriteLine(weekday_number_2);
        Console.WriteLine(weekday_number_3);
        Console.WriteLine(weekday_number_4);
        Console.WriteLine(weekday_number_5);
        Console.WriteLine(weekday_number_6);
    }
}


-- Result
5
7
10
13
20
364
700

enum의 각 요소에 대한 index는 0부터 1씩 증가하도록 매겨지는 것이 기본입니다.

 

    enum Weekdays
    {
        Mon=5,
        Tue=7,
        Wed=10,
        Thu=13,
        Fri=20,
        Sat=364,
        Sun=700
    }

하지만 위 예시에서처럼 enum 객체 생성 시 요소 = index 쌍으로 명시해주면 각각의 요소에 연결된 index를 내 마음대로 지정할 수 있습니다.

단, index는 오로지 정수만 가능합니다.

 

 

 

 

 

using System;
using System.Windows.Forms;

class MyProgram
{
    enum Weekdays
    {
        Mon=5,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
        Sun
    }

    public static void Main()
    {
        int weekday_number_0 = (int) Weekdays.Mon;
        int weekday_number_1 = (int) Weekdays.Tue;
        int weekday_number_2 = (int) Weekdays.Wed;
        int weekday_number_3 = (int) Weekdays.Thu;
        int weekday_number_4 = (int) Weekdays.Fri;
        int weekday_number_5 = (int) Weekdays.Sat;
        int weekday_number_6 = (int) Weekdays.Sun;
        Console.WriteLine(weekday_number_0);
        Console.WriteLine(weekday_number_1);
        Console.WriteLine(weekday_number_2);
        Console.WriteLine(weekday_number_3);
        Console.WriteLine(weekday_number_4);
        Console.WriteLine(weekday_number_5);
        Console.WriteLine(weekday_number_6);

        foreach (Weekdays i in Enum.GetValues(typeof(Weekdays)))
        {
            Console.WriteLine(i);
        }
    }
}


-- Result
5
6
7
8
9
10
11

enum index 설정 시 지정되지 않은 요소에 대한 index는 이전 요소의 index부터 1씩 증가하면서 자동으로 index가 매겨집니다.

 

    enum Weekdays
    {
        Mon=5,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
        Sun
    }

위 예시에서 enum 생성 부분을 보면 Mon=5로 Mon 요소의 index가 5이니까

그 다음인 Tue의 index는 6이 됩니다.

Wed의 index는 7이 됩니다.

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;

class MyProgram
{
    enum Weekdays
    {
        Mon=5,
        Tue=3,
        Wed=1,
        Thu=8,
        Fri,
        Sat,
        Sun
    }

    public static void Main()
    {
        int weekday_number_0 = (int) Weekdays.Mon;
        int weekday_number_1 = (int) Weekdays.Tue;
        int weekday_number_2 = (int) Weekdays.Wed;
        int weekday_number_3 = (int) Weekdays.Thu;
        int weekday_number_4 = (int) Weekdays.Fri;
        int weekday_number_5 = (int) Weekdays.Sat;
        int weekday_number_6 = (int) Weekdays.Sun;
        Console.WriteLine(weekday_number_0);
        Console.WriteLine(weekday_number_1);
        Console.WriteLine(weekday_number_2);
        Console.WriteLine(weekday_number_3);
        Console.WriteLine(weekday_number_4);
        Console.WriteLine(weekday_number_5);
        Console.WriteLine(weekday_number_6);
    }
}


-- Result
5
3
1
8
9
10
11

위 예시에서처럼 enum의 index를 별도로 설정할 때에는 반드시 점점 index가 증가하도록 설정할 필요는 없습니다.

그리고 index가 명시되지 않은 부분은 index가 명시된 부분부터 1씩 증가하도록 자동으로 index가 매겨집니다.

 

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;

class MyProgram
{
    enum Weekdays
    {
        Mon,
        Tue,
        Wed,
        Thu,
        Fri,
        Sat,
        Sun
    }

    public static void Main()
    {
        foreach (Weekdays i in Enum.GetValues(typeof(Weekdays)))
        {
            Console.WriteLine(i);
        }
    }
}


-- Result
Mon
Tue
Wed
Thu
Fri
Sat
Sun

enum을 foreach loop에 적용하여 enum의 각 요소에 접근하는 예시입니다.

 

 

 

 

 

 

728x90
반응형
Comments