반응형

 

ENUM(열거형)을 자주 사용하는가?

나는 이제 열거형이 없으면 개발이 안될 정도로 자주 사용하고 있다.

 

열거형을 왜 사용하는 것일까?

나에게 이런 질문이 주어진다면, 'KEY-VALUE를 명확하게 정의해준다.' 라고 말해주고 싶다.

그리고 다른 개발자가 해당 열거형을 본다면, 이해하는 속도를 확연하게 줄여줄 수 있다.

 

열거형의 예제를 만들어보자.

1
2
3
4
5
6
7
8
9
[Flags]
public enum FruitType {
    None = 0,
    Apple = 1,
    Banana = 2,
    Mango = 4,
    Melon = 8,
    WaterMelon = 16
}
cs

과일의 종류를 열거형으로 구현해봤다.

 

[Flags]를 추가함으로써, 열거형 형식을 이용하여 비트 플래그를 사용할 수 있게 된다.

비트 플래그를 사용하기 위해서는 열거형 형식의 값을 2의 거듭제곱 값을 사용해야 한다. (아래와 같이.)

2의 거듭제곱

기본적으로 열거형은 int형식을 상속한다.

그렇기 때문에 내가 어느정도의 값을 열거형으로 나열할 것인지 판단하여,

어떠한 타입으로 상속할 것인지 정해주어야 한다.

이때 해당 열거형 값이, DB(데이터베이스)에도 들어간다면 컬럼 타입 설정에도 유념해야 한다.

 

열거형 형변환

열거형을 파라미터로 사용할 수도 있고, 여러 가지 사용하다 보면 형변환이 필수적으로 사용된다.

그래서 나는 아래 코드를 자주 사용한다.

 

아래 코드는 두 가지 질의를 가지고 판단한다.

 

1. 해당 문자열이 열거형으로 형변환이 가능한가?

2. 해당 문자열이 형변환했을때, 열거형에 정의된 값인가?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var test = "1";     // 열거형에 있는 값으로
var test = "2014";  // 열거형에 없는 값으로
 
var rst = FruitType.None;
 
// TryParse : 형변환이 가능한지.
// IsDefined : 정의되어 있는 Enum인지.
if (Enum.TryParse(test, trueout FruitType result) && Enum.IsDefined(typeof(FruitType), result)) {
    rst = result;
else {
    rst = FruitType.None;
}
 
Console.WriteLine(rst);
// 열거형에 있는 값이라면, rst는 Apple이 출력.
// 열거형에 없는 값이라면, 열거형의 기본값이 None이 출력
cs

그래서 두 질의가 모두 맞다면, 형변환하여 값을 저장하고

두 질의 중 하나라도 틀리다면, 열거형의 기본값이 FruitType.None을 설정해준다.

 

쉽다면 쉽고, 어렵지는 않다. 하지만 귀찮을 뿐이다.

그렇지만 나를 위해서, 그리고 나와 함께 일하는 동료를 위해서라도

가독성이 뛰어난 ENUM(열거형)을 많이 사용하자.

 

반응형

+ Recent posts