C # 8에서 GUID를 사용하는 방법

애플리케이션에서 작업 할 때 종종 GUID (Globally Unique Identifier)를 사용해야 할 수 있습니다. SQL 데이터베이스의 기본 키와 같은 고유 식별자는 고객 및 송장과 같은 중요한 개체가 중복되거나 덮어 쓰이지 않도록합니다. 고유 식별자 없이는 데이터 손실을 방지하거나 애플리케이션의 데이터 무결성을 보장 할 수 없습니다. 

GUID (Globally Unique Identifier)는 거대한 식별 번호를 나타냅니다.이 숫자는 데이터베이스와 같은 단일 시스템에서뿐만 아니라 여러 시스템 또는 분산 된 응용 프로그램에서 고유하다는 것을 수학적으로 보장 할 수있는 매우 큰 숫자입니다. 이 문서에서는 GUID가 필요한 이유와 C # 8.0에서 GUID를 사용하는 방법에 대해 설명합니다.

이 문서에 제공된 코드 예제를 사용하려면 시스템에 Visual Studio 2019가 설치되어 있어야합니다. 아직 복사본이없는 경우 여기에서 Visual Studio 2019를 다운로드 할 수 있습니다. 

Visual Studio에서 콘솔 애플리케이션 프로젝트 만들기

먼저 Visual Studio에서 .NET Core 콘솔 애플리케이션 프로젝트를 만들어 보겠습니다. Visual Studio 2019가 시스템에 설치되어 있다고 가정하고 아래에 설명 된 단계에 따라 Visual Studio에서 새 .NET Core 콘솔 애플리케이션 프로젝트를 만듭니다.

  1. Visual Studio IDE를 시작합니다.
  2. "새 프로젝트 만들기"를 클릭합니다.
  3. "새 프로젝트 만들기"창의 표시된 템플릿 목록에서 "콘솔 앱 (.NET Core)"을 선택합니다.
  4. 다음을 클릭하십시오.
  5. 다음에 표시된 "새 프로젝트 구성"창에서 새 프로젝트의 이름과 위치를 지정합니다.
  6. 생성을 클릭합니다.

그러면 Visual Studio 2019에서 새로운 .NET Core 콘솔 애플리케이션 프로젝트가 생성됩니다.이 문서의 후속 섹션에서는이 프로젝트를 사용하여 GUID를 사용합니다. 여기서는 C # 8을 사용하므로 프로젝트의 언어 버전을 업데이트 할 수 있습니다.

GUID가 필요한 이유는 무엇입니까?

모바일 애플리케이션에서 온라인 및 오프라인 모드 모두에서 사용할 수있는 POS 애플리케이션이 있다고 가정 해보십시오. 애플리케이션이 1부터 자동으로 생성되는 ID 번호를 제공한다고 가정합니다. 연결이 복원되면 오프라인 데이터를 어떻게 병합 할 수 있습니까? 두 모드 모두에서 ID 번호가 생성 된 경우 어떻게됩니까? 충돌이있을 수 있지요? 중복 된 ID 번호를 어떻게 처리합니까? 확실히 처리 할 수는 있지만 많은 코드를 작성해야합니다.이 작업은 원하는 것이 아닙니다.

GUID가 구출되는 곳입니다. GUID는 거대한 숫자 (128 비트 길이)이며 거의 고유합니다. 왜 거의 독특한가요? 왜 독특하다고 말할 수 없습니까? 기본적으로 가능한 GUID의 수가 너무 많아 충돌 가능성이 극히 적습니다. 그럼에도 불구하고 충돌 가능성은 0이 아닙니다. 

GUID를 데이터베이스 테이블의 기본 키로 만들어서 활용할 수 있습니다. GUID를 사용하면 둘 이상의 데이터베이스를 병합 할 때 병합 충돌을 방지하는 데 도움이됩니다. GUID의 또 다른 장점은 오프라인으로 생성 할 수 있다는 것입니다. 네트워크 나 인터넷에 연결할 필요가 없습니다.

GUID는 어떻게 표현됩니까?

다음은 GUID의 예입니다. GUID는 일반적으로 128 비트 길이이며 16 진수로 표시됩니다.

eaa24756-3fac-4e46-b4bb-074ff4f5b846

GUID는 8-4-4-4-12의 청크로 그룹화 된 32 개의 16 진수로 구성된 잘 정의 된 시퀀스로 구성됩니다. 따라서 최대 2 ^ 128 개의 GUID를 가질 수 있습니다.

C # 8에서 GUID 만들기

이 섹션에서는 C #에서 GUID로 작업하는 방법에 대해 알아 봅니다. System 네임 스페이스의 일부로 제공되는 Guid 구조체를 사용하여 .NET에서 GUID를 만들 수 있습니다. 다음은 C #에서 GUID를 생성하는 가장 쉬운 방법입니다. 앞서 만든 프로젝트에있는 Program.cs 파일의 Main () 메서드에 다음 코드를 작성합니다.

Guid obj = Guid.NewGuid ();

Console.WriteLine ( "새로 생성 된 Guid는"+ obj.ToString ());

Console.ReadKey ();

C # 8에서 빈 GUID 만들기

Guid는 구조체이기 때문에 값 유형이므로 null로 설정할 수 없습니다. 빈 Guid를 만들려면 다음 코드를 작성할 수 있습니다.

Guid id = new Guid ();

if (id == Guid.Empty)

Console.WriteLine ( "Guid가 비어 있습니다.");

Guid.Empty의 값은 00000000-0000-0000-0000-000000000000입니다. 빈 GUID를 활용하여 다른 GUID 개체와 비교하여 0이 아닌지 확인할 수 있습니다. 다음 코드 스 니펫은이를 보여줍니다. 

if (guid! = Guid.Empty) { 

  // GUID 개체에 0이 아닌 값이 있습니다.

}

그밖에

{

  // GUID 개체가 비어 있습니다.

다음은 GUID가 Guid.Empty인지 확인하는 간단한 확장 방법입니다. 

public static bool IsNullOrEmpty (이 Guid GUID)

{

  반환 (guid == Guid.Empty);

다음 확장 메서드를 사용하여 nullable GUID가 null인지 확인할 수도 있습니다. 

public static bool IsNullOrEmpty (이 Guid? guid)

{

  if (guid.HasValue)

    if (guid == default (Guid))

        true를 반환하십시오.

    거짓 반환;

}

default (Guid)는 Guid.Empty와 동일합니다.

C # 8에서 GUID를 문자열로 변환

GUID를 문자열로 변환 할 수도 있습니다. 다음 코드 조각은 빈 GUID를 문자열로 변환하는 방법을 보여줍니다.

문자열 str = Guid.Empty.ToString ();

Console.WriteLine (str);

GUID 사용에 대한 한 가지 주요주의 사항이 있습니다. 충돌이있을 수 있습니다. GUID는 약간의 공간을 차지하며 순차적으로 생성되지 않습니다. 그러나 두 ULong 값을 사용하여 표현할 수있는 128 비트 정수를 사용하고 순차적으로 증분함으로써 GUID를 프로그래밍 방식으로 고유하게 만들 수 있습니다. 

응용 프로그램에서 GUID를 문자열로 자주 변환 할 수 있습니다. GUID 데이터를 데이터 컨트롤에 바인딩하거나 GUID를 사용자 인터페이스에 전달하려면이 작업을 수행해야 할 수 있습니다. 요구 사항에 따라 GUID 데이터의 형식을 지정하기 위해 GUID 개체를 문자열로 변환 할 수도 있습니다.

여러 가지 방법으로 GUID를 만들 수 있습니다. 여기에는 임의, 시간 기반, 하드웨어 기반 및 콘텐츠 기반 (즉, 데이터 조각의 MD5 또는 SHA-1 해시 값 기반)이 포함됩니다. 이 모든 방법과 GUID의 기타 고급 기능은 여기의 향후 기사에서 설명하겠습니다.

C #에서 더 많은 작업을 수행하는 방법

  • C #에서 추상 클래스와 인터페이스를 사용하는 경우
  • C #에서 AutoMapper를 사용하는 방법
  • C #에서 람다 식을 사용하는 방법
  • C #에서 Action, Func 및 Predicate 대리자를 사용하는 방법
  • C #에서 대리자를 사용하는 방법
  • C #에서 간단한 로거를 구현하는 방법
  • C #에서 특성을 사용하는 방법
  • C #에서 log4net으로 작업하는 방법
  • C #에서 리포지토리 디자인 패턴을 구현하는 방법
  • C #에서 리플렉션을 사용하는 방법
  • C #에서 filesystemwatcher로 작업하는 방법
  • C #에서 지연 초기화를 수행하는 방법
  • C #에서 MSMQ를 사용하는 방법
  • C #에서 확장 메서드를 사용하는 방법
  • C #에서 람다 식 사용 방법
  • C #에서 volatile 키워드를 사용하는 경우
  • C #에서 yield 키워드를 사용하는 방법
  • C #에서 다형성을 구현하는 방법
  • C #에서 자신 만의 작업 스케줄러를 빌드하는 방법
  • C #에서 RabbitMQ로 작업하는 방법
  • C #에서 튜플을 사용하는 방법
  • C #에서 가상 및 추상 메서드 탐색