728x90
반응형
§ 열거형 Enum §
◈ 사용하는 목적
1. 일반적인 숫자(상수)보다 의미있는 단어로 표현하기 위하여 사용.
2. 타인을 배려할 수 있는 프로그래밍.
3. 가독성 상승
- Enum을 사용하지 않고, switch case 사용할 때의 형태 :
class MyClass
{
static void Main(string[] args)
{
Order(2, 3);
}
static void Order(int item, int cnt)
{
switch (item)
{
case 1:
Console.WriteLine("Coffee " + cnt + "잔");
break;
case 2:
Console.WriteLine("Green Tea " + cnt + "잔");
break;
case 3:
Console.WriteLine("Ice " + cnt + "잔");
break;
case 4:
Console.WriteLine("soup " + cnt + "잔");
break;
default:
break;
}
}
}
▲ 위의 코드를 Enum을 사용하여 정리하기
class MyClass
{
[Flags]
// Flags 지정 : enum의 index를 bit로 변환, 연산
// nor로 멤버를 포함시켜두고, 멤버가 있는지 없는지 찾아보는 것
public enum Item // Index number 자동 지정
{
//Coffee = 1, // 0000 0001
//Tea, // 0000 0010
//Ice, // 0000 0011
//Soup // 0000 0100
Coffee = 1, // 0000 0001
Tea = 2, // 0000 0010
Ice = 4, // 0000 0100 상위 2개를 bit연산한 결과값
Soup = 8 // 0000 1000 상위 2개를 bit연산한 결과값
}
static void Main(string[] args)
{
// Order(Item.Coffee, 3);
Item i = Item.Coffee | Item.Tea; // 커피와 차를 비트연산으로 i에 입력
// 0000 0001 0000 0010
// 0000 0011 = i 의 값
if ((i & Item.Ice) != 0)
{ // 0000 0011
// 0000 0001
// 0000 0001 = if의 결과값
Console.WriteLine();
}
//if (i.HasFlag(Item.Coffee)) // Flags와 동일한 기능
// Console.WriteLine( );
}
static void Order(Item item, int cnt)
{
switch (item)
{
case Item.Coffee:
Console.WriteLine("Coffee " + cnt);
break;
case Item.Tea:
Console.WriteLine("Green Tea " + cnt);
break;
case Item.Ice:
Console.WriteLine("Ice " + cnt);
break;
case Item.Soup:
Console.WriteLine("soup " + cnt);
break;
}
}
}
- public enum Item 의미 :
1. public : 누구나 접근할 수 있도록 접근제한자를 풀어주겠다.
2. enum : 열거형 모음집. 나열해놓으면, 알아서 순서를 붙여주겠다.
3. item : 모음집의 이름
- 일반적인 Enum : 내부 인덱스가 1단위로 증가한다.
- [Flags] : Enum을 Bit연산 형식으로 전환시키는 명령어. 내부 Index에 nor 연산을 추가한다.
- Enum의 내부 변수(index)처리 : 메인 함수 또는 외부 함수에서 switch case를 사용하거나 if를 사용해서, 각 인덱스별 대응 출력 내용을 처리하도록 한다.
728x90