[프로그램]

C# 9.0부터 도입된 레코드(Record)는 불변(immutable) 데이터를 표현하기 위한 간편한 구조 예제

Blackberrys 2023. 6. 28. 08:51
반응형

C# 9.0부터 도입된 레코드(Record)는 불변(immutable) 데이터를 표현하기 위한 간편한 구조입니다. 레코드는 클래스와 유사하지만 몇 가지 차이점이 있습니다.
레코드는 클래스와 달리 기본적으로 불변입니다. 즉, 한 번 생성된 후에는 내부 상태를 변경할 수 없습니다. 이를 통해 레코드의 값을 보장하고 데이터의 일관성과 안정성을 유지할 수 있습니다.
레코드를 정의하기 위해서는 record 키워드를 사용합니다. 예를 들어, 다음은 Person이라는 레코드를 정의하는 예입니다:
 
record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}
위의 예제에서 Person은 두 개의 속성(FirstName과 LastName)을 가지는 불변 레코드입니다. init 접근자를 사용하여 속성을 초기화할 수 있지만, 이후에는 변경할 수 없습니다.
레코드는 자동으로 ToString() 메서드, GetHashCode() 메서드, Equals() 메서드를 재정의합니다. 이를 통해 레코드 간의 값 비교 및 사용이 간편해집니다.
레코드는 값이 같은 경우 동일한 인스턴스를 공유합니다. 따라서 같은 값을 가진 레코드를 여러 곳에서 참조해도 메모리 사용량을 줄일 수 있습니다.
또한, C# 10.0에서는 레코드에 init-only 속성 및 추가 메서드를 정의할 수 있는 기능이 추가되었습니다.
레코드는 불변 데이터의 표현에 적합하며, DTO(Data Transfer Object), 메시지 전달 등 다양한 상황에서 유용하게 사용될 수 있습니다.
 
다음은 레코드를 사용하여 간단한 예제를 만들어 보는 코드입니다. 이 예제에서는 Person이라는 레코드를 정의하고, 몇 가지 레코드를 생성하고 비교하는 방법을 보여줍니다.
 
using System;

record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

class Program
{
    static void Main()
    {
        // 레코드 생성
        var person1 = new Person { FirstName = "John", LastName = "Doe" };
        var person2 = new Person { FirstName = "Jane", LastName = "Smith" };
        var person3 = new Person { FirstName = "John", LastName = "Doe" };

        // 레코드 출력
        Console.WriteLine(person1); // 출력: Person { FirstName = John, LastName = Doe }
        Console.WriteLine(person2); // 출력: Person { FirstName = Jane, LastName = Smith }

        // 레코드 비교
        Console.WriteLine(person1 == person2); // 출력: False
        Console.WriteLine(person1 == person3); // 출력: True

        // 레코드 복제 (속성 값 변경)
        var updatedPerson = person1 with { FirstName = "Johnny" };
        Console.WriteLine(updatedPerson); // 출력: Person { FirstName = Johnny, LastName = Doe }
    }
}
 
 
위의 예제에서는 Person이라는 레코드를 정의하고, FirstName과 LastName이라는 속성을 가지도록 하였습니다. Main() 메서드에서는 레코드를 생성하고 출력하며, 비교 및 복제를 수행하는 예제입니다.
레코드 생성시 init 접근자를 사용하여 속성을 초기화하였고, with 키워드를 사용하여 기존 레코드의 값을 복제하고 일부 속성 값을 변경한 새로운 레코드를 생성하였습니다.
실행 결과로는 레코드의 값과 비교 결과가 출력되며, 복제된 레코드의 값 또한 확인할 수 있습니다.
 
 
 I am a father of one boy and two girls living in Cheongju. We love to go "plogging" together every day. Plogging is an activity where we pick up litter while taking a walk, with the goal of preserving the environment and creating a clean community. It's a valuable time for our family to join forces.

You can find our activities on YouTube at https://www.youtube.com/@0070TV. We kindly ask for your support and encouragement.