일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Redshift
- numpy
- google apps script
- c#
- gas
- array
- Kotlin
- GIT
- PySpark
- Mac
- Java
- PANDAS
- Excel
- hive
- 파이썬
- Google Excel
- Tkinter
- SQL
- math
- dataframe
- list
- matplotlib
- Google Spreadsheet
- Apache
- string
- django
- Python
- PostgreSQL
- Github
- Today
- Total
달나라 노트
C# : enum (Enumeration, 열거체) 본문
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의 각 요소에 접근하는 예시입니다.
'C# > C#' 카테고리의 다른 글
C# : Panel (FlowLayoutPanel, TableLayoutPanel, 컨트롤 배치, 소스 배치) (0) | 2022.04.01 |
---|---|
C# : CheckBox, CheckBox Event (0) | 2022.04.01 |
C# : KeyEventHandler (키보드 입력 이벤트, Keyboard input event, KeyDown, KeyUp) (0) | 2022.03.30 |
C# : EventHandler (마우스 이벤트 처리) (Window 클릭, 버튼 클릭, 마우스 오버, Window click, Button click, mouse over) (3) | 2022.03.30 |
C# : static (정적 데이터) (0) | 2022.03.29 |