본문 바로가기
백엔드/C#

C#에서 enum 다중값 사용하는 방법

by 1005ptr 2021. 5. 2.
반응형

C#에 Enum은 여러값을 동시에 가질 수 있다.

DisplayLayer라는 enum은 드로잉 화면에 Draw 객체들을 층층이 구분하여 표현하는데 사용된다.

드로잉 캔버스에는 HiddenLayer라는 속성이 존재하고

이 속성은 여러 레이어 중에 숨겨서 안보여줄 Layer를 지정하는 속성이다.

 

만약 Enum이 여러값을 가질수 없다면?

동시에 하나의 Layer만 숨길수 있다거나

HiddenLayer 속성은 여러개를 가질수 있도록 List<DisplayLayer> 타입이어야 한다.

 

Enum이 여러개의 값을 가질수있기 때문에

캔버스.HiddenLayer = DisplayLayer.One | DisplayLayer.Two 와 같이 사용할수가 있다.

 

아래 코드 처럼 C# 윈폼에서도 저런식으로 다 사용할수있게 해뒀다.

        protected override void keyPressed(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            switch (e.KeyData)
            {
                case Keys.Control | Keys.C:

 

직접 enum을 만들고 사용하는 경우

다중값을 처리하도록 하기 위해서는 몇가지 규칙이 필요하다.

1. enum에 할당된 값을 1,2,4,8,16과 같이 2의 배수로 늘려가며 정해둬야 한다.

2. & 연산자(&& 아님)를 사용해서 다중값 중에 저 값이 있는지 확인

 

규칙 2를 보면 규칙 1이 이해가 된다.

비트연산자를 활용하기 때문에 비트마다 하나의 enum을 부여했다고 생각하면 된다.

그럼 이런 생각이 든다. 1비트에 하나의 enum이 할당되는 식이니

enum이 특정 개수를 넘어서면 이런 방식은 사용불가하겠구나

아마 int(4byte)겠지 했는데 찾아보니 그렇다.

그럼 32bit이니 이 방식은 enum 타입이 32개보다 작은 경우에만 사용가능할 것이다.

 

stackoverflow.com/questions/22768605/how-much-memory-does-an-enum-take

 

How much memory does an enum take?

I need to decide if I will use enums in a big array I need in my project. To do that I have to know what is size of an enum variable. enum Player { First, Second, Third, F...

stackoverflow.com

 

반응형

댓글