C#/문법 정리
C# - 열거형(enum)
Khadra
2024. 7. 13. 14:21
열거형(enum)
- 서로 관련 있는 상수들의 집합을 정의한 것이다.
- 숫자에 특정한 명칭을 붙여주어 의미를 쉽게 이해할 수 있게 하는 용도로 사용된다.
- 예를 들어, 프로그램에서 사과,바나나,오렌지의 3가지 과일을 사용하는데 각각 0, 1, 2 라는 숫자를 부여해서
if(fruit == 1)과 같이 사용한다면 나중에 1이 무엇을 의미하는지 이해하기가 어려울 것이다.
이럴 때 enum을 사용하면 편한 코드를 구상할 수 있다.
예시
// 예시 1
enum fruit
{
Apple,
Banana,
Orange
};
Fruit fruit;
static void Main(string[] args)
{
// fruit가 enum Fruit의 Apple와 같다면.
if (fruit == Fruit.Apple)
{
// ...
}
}
- 원소로 기술된 명칭을 기호상수라고 부른다.
- 명시된 순서에 따라 디폴트로 0부터 순서대로 정수값을 갖게 됨
// 예시 2
enum Day
{
Sat,
Sun,
Mon,
Tue,
Wed,
Thu,
Fri
}
- Sat는 0, Sun = 1, Mon = 2, ...와 같이 0부터 순서대로 정수값을 가진다.
// 예시 3
enum Day
{
Sat,
Sun,
Mon,
Tue,
Wed,
Thu,
Fri = 10
}
- 기호상수의 값을 지정할 수도 있다.
- Sat를 1로 설정해주었으므로 그 다음 요소는 2,3,4,...와 같은 값을 갖게되며,
맨 마지막 Fri는 별도로 10을 지정했으므로 10의 값을 갖게 된다.
// 예시 4
int x = (int)Day.Sun;
- 열거형 값을 정수로 대입할 때는 (int)로 캐스팅해야 한다.
enum문
- 클래스 안이나 네임스페이스 내에서만 선언될 수 있다.
- 즉, 메소드 안이나 프로퍼티 안에서는 선언할 수 없다.
- Enum클래스에서 제공되는 GetValue()와 GetName()메소드를 사용하여
enum의 값들을 반복문에서 사용할 수 있다.
예제 코드
using System;
using static System.Console;//Console단어를 생략(코드길이줄어둠)
namespace ConsoleApp1
{
class Program
{
// 4개의 요소값을 갖는 열거형 Size를 정의합니다.
// 열거형은 메소드 안에 쓸 수 없고, namespace나 class 안에 위치해야한다.
enum Size
{
Short,
Tall,
Grande,
Venti
};
// 정수 배열 price를 정의한다.
// enum Size의 각 요소에 해당하는 가격을 표시한다.
static int[] prive = { 3300, 3800, 4300, 4800 };
// 열거형 Color를 정의한다.
// 4개의 요소에 각각 값을 지정한다.
enum Colors
{
Red =1,
Green = 2,
Blue = 4,
Yellow = 8
};
// 열거형 Coffee를 정의한다.
// 사이즈를 기호 상수로 가격을 값으로 지정한다.
enum Coffee
{
Short = 3300,
Tall = 3800,
Grande = 4300,
Venti = 4800
};
static void Main(string[] args)
{
WriteLine("커피 가격표");
// 열거형 Size의 각 요소에 대해 가격을 price배열에서 가져와서 출력한다.
for(int i = 0; i < 4; i++)
{
// Size.Short를 출력하면 "Short"이라는 문자열을 출력하고
// 이를 (int)로 캐스팅하면 기호상수에 해당하는 숫자를 사용할 수 있다.
if (i == (int)Size.Short)
WriteLine("{0,10} : {1:C}", Size.Short, prive[i]);
else if (i == (int)Size.Tall)
WriteLine("{0,10} : {1:C}", Size.Tall, prive[i]);
else if (i == (int)Size.Grande)
WriteLine("{0,10} : {1:C}", Size.Grande, prive[i]);
else if (i == (int)Size.Venti)
WriteLine("{0,10} : {1:C}", Size.Venti, prive[i]);
}
WriteLine("\n커피 가격표(Enum iteration)");
// Enum.GetValues(typeof(Size))를 foreach문에 사용하면 열거형의 각 요소를 반복문에서 사용할 수 있다.
foreach ( var size in Enum.GetValues(typeof(Size)))
{
// 크기와 가격을 출력한다.
WriteLine("{0,10} : {1:C}", size, prive[(int)size]);
}
WriteLine("\nColors Enum iteration");
// 반복문에서 Colors 열거형의 각 요소 이름과 값을 출력한다.
foreach(var color in Enum.GetValues(typeof(Colors)))
{
WriteLine("{0,10} : {1}", color, Convert.ToInt32(color));
}
WriteLine("\n커피 가격표(Enum iteration with value)");
// eunm Coffee의 각 요소 이름과 값을 출력한다.
foreach(var coffee in Enum.GetValues(typeof(Coffee)))
{
// 이렇게 되면 price[]배열을 사용할 필요가 없다.
WriteLine("{0,10} : {1:C}", coffee, Convert.ToInt32(coffee));
}
}
}
}
결과
커피 가격표
Short : ₩3,300
Tall : ₩3,800
Grande : ₩4,300
Venti : ₩4,800
커피 가격표(Enum iteration)
Short : ₩3,300
Tall : ₩3,800
Grande : ₩4,300
Venti : ₩4,800
Colors Enum iteration
Red : 1
Green : 2
Blue : 4
Yellow : 8
커피 가격표(Enum iteration with value)
Short : ₩3,300
Tall : ₩3,800
Grande : ₩4,300
Venti : ₩4,800