열거형 또는 열거형 형식이라고 불리는 enum은 특정 목록에 대한 조합으로 정의 하여 사용하는 형식입니다.
예를 들어
오늘 모 먹지? 라는 질문에
한국요리, 중국요리, 일본요리, 패스트푸드... 등등
위와 같이 비슷한 주제에 대한 목록을 묶음으로 정의 해두고 사용하는 형식입니다.
특히 그 목록이 반복적으로 사용되어 질 때 더욱 효과적으로 사용할 수 있습니다.
public enum FoodType
{
None,
Korean,
Chinese,
Japanese,
FastFood,
etc
}
기본적으로 위와 같이 정의 했을 때 컴파일러는 각 항목을 int 형으로 인식하게 됩니다.
내가 가장 좋아하는 자동차 회사는? 이라는 질문에 답변하는 프로그램을 만든다고 했을 때
다음과 같이 코드를 작성해 보겠습니다.
using System;
namespace enumTest
{
public enum CarCompany
{
None,
Hyundai,
Kia ,
SsangYong ,
BMW ,
Tesla
}
public class Program
{
static void Main(string[] args)
{
CarCompany temp = CarCompany.Hyundai;
Console.WriteLine(temp + " int : " + (int)temp);
}
}
}
다음과 같이 출력이 되었습니다.
[System.Flags] 키워드
만약 한 회사가 아니라 여러회사를 좋아하는 사람이면 어떻게 할 수 있을까요?
system.flag 키워드를 붙이면 여러 개의 선택을 하나의 값으로 조합할 수 있습니다.
using System;
namespace enumTest
{
[System.Flags]
public enum CarCompany : byte
{
None,
Hyundai = 1,
Kia = 1 << 1,
SsangYong = 1 << 2,
BMW = 1 << 3,
Tesla = 1 << 4
}
public class Program
{
static void Main(string[] args)
{
CarCompany temp = CarCompany.Hyundai | CarCompany.Tesla;
Console.WriteLine(temp + " byte : " + (byte)temp);
}
}
}
결과는 다음과 같이 출력이 됩니다.
! 저장할 옵션(목록)의 개수에 따라서 효율적인 코드 작성을 위해서 다음과 같은 사용을 권장한다.
8개 = byte 상속
16개 = short
32개 = int
64개 = long
<< 쉬프트 연산자
1은 2진법으로 0001 입니다.
0001을 1만큼 << 쉬프트 하게 되면
0010 이 되기 때문에 2가 됩니다.
따라서 위의 코드에서 CarCompany를 쉬프트 연산자로 정의한 내용은 다음과 같습니다.
None = 0,
Hyundai = 1
Kia = 2
SsangYong = 4
BMW = 8
Tesla = 16
출력결과가 다음과 같이 나온 이유는
현대와 테슬라를 비트 연산 | 했기 때문에 17이 나오게 된 것입니다.
'Programing > dotnet core' 카테고리의 다른 글
지역변수 & 지역변수 추론 (var type) (0) | 2020.03.10 |
---|---|
[dotnetcore] 프로그램의 메모리와 성능 모니터링 하는 법을 통해 알아보는 string vs StringBuilder의 차이점 (0) | 2020.03.03 |
[dotnetcore] How to check overflow (산술 오버플로우 검사) checked & unchecked (0) | 2020.02.26 |
dotnetcore : try catch finally vs using (0) | 2020.02.19 |
goto문을 활용한 switch문 (0) | 2020.02.18 |