C# 세트 플래그 열거형 이해하기: 플래그 지정
C#에서 권한, 구성 또는 설정을 다룰 때 여러 값을 하나의 변수에 저장해야 하는 상황이 종종 발생합니다. 각 설정마다 별도의 부울 값을 사용하는 대신 플래그 열거형을 사용할 수 있습니다. 이 방법은 이진 연산을 활용하여 단일 정수 값 내에서 여러 옵션을 효율적으로 관리합니다.
이 글에서는 Tim Corey의 동영상 " C#의 바이너리: 10분 안에 플래그 할당하기" 를 바탕으로 C#에서 플래그 열거형을 설정하는 방법을 자세히 살펴보겠습니다. Tim은 이진 연산을 사용하여 여러 값을 할당하는 방법을 설명하며, 이를 통해 코드를 더욱 효율적이고 읽기 쉽게 만들 수 있다고 말합니다. 자, 시작해 볼까요?
플래그 열거형 소개
Tim은 이 강의가 C#에서 이진법을 이해하기 위한 시리즈의 일부라고 설명하며 강의를 시작합니다. 이 영상에서 그는 이진 연산을 사용하여 플래그를 할당하는 방법에 집중합니다. 플래그를 사용하면 여러 값을 하나의 정수에 저장할 수 있으므로 권한 관리가 훨씬 간단하고 효율적입니다.
비트 OR 연산을 사용하여 여러 플래그 할당하기
Tim은 비트 OR 연산자를 사용하여 여러 권한을 결합하는 방법을 보여줍니다.|) 연산자. 그는 SQL, Redis, BuildSystem과 같은 다양한 권한 수준을 포함하는SystemPermissions` 열거형을 만듭니다. 여러 변수를 사용하는 대신 모든 권한을 하나의 값에 저장할 수 있습니다.
변수에 여러 권한을 할당하는 예:
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;
// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;
// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);이진 표현 표시
무슨 일이 일어나고 있는지 더 잘 이해하기 위해, Tim은 Convert.ToString(value, 2)를 사용하여 정수 값을 이진 형식으로 변환할 것을 제안합니다. 이를 통해 어떤 비트가 설정되어 있는지 시각화할 수 있습니다.
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));이는 서로 다른 비트 위치가 서로 다른 권한에 해당함을 보여주며, 하나의 정수에 여러 설정을 저장할 수 있는 방법을 보여줍니다.
OR 연산자를 사용하여 권한 추가하기
Tim은 를 사용하면 권한을 동적으로 추가할 수 있다고 설명합니다.|= 연산자:
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;
// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;
// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);32비트 한계 이해하기
Tim은 중요한 고려 사항을 강조합니다. C#의 정수 데이터 형식은 32비트로 제한됩니다. 이는 우리가 int에 최대 32개의 고유한 플래그만 저장할 수 있음을 의미합니다. 32개 이상의 플래그가 필요하다면, long(64비트) 또는 여러 값을 사용하는 것을 고려해야 합니다. 하지만 대부분의 경우 깃발 32개면 충분합니다.
플래그를 데이터베이스에 저장하기
플래그 열거형을 사용하는 가장 큰 장점 중 하나는 데이터베이스에 효율적으로 저장할 수 있다는 것입니다. 여러 개의 부울 열을 저장하는 대신 모든 권한을 나타내는 단일 정수 값을 저장할 수 있습니다. 팀은 이러한 접근 방식이 데이터베이스의 복잡성과 저장 공간 요구 사항을 크게 줄여준다고 설명합니다.
예를 들어, TimPermissions가 37로 저장되어 있다면, 이는 다음의 조합을 나타냅니다:
- SQL (비트 1)
- 레디스(비트 3)
- 빌드 시스템(비트 5)
데이터베이스에서 이 값을 가져오면 쉽게 디코딩하여 현재 활성화된 권한을 확인할 수 있습니다.
결론
팀은 플래그 열거형의 강력한 기능을 강조하며 마무리합니다. 이진 연산을 사용하면 단일 정수 내에서 여러 상태를 효율적으로 관리할 수 있습니다. 이 기술은 성능을 향상시키고, 데이터 저장을 간소화하며, 코드의 가독성을 높여줍니다.
이러한 접근 방식을 따르면 C# 플래그 열거형을 사용하여 깔끔하고 확장 가능한 권한 관리 시스템을 구현할 수 있습니다. 더 잘 이해하려면 전체 영상을 시청하세요.

