반응형
record 사용 예제
- C# 9.0에서 추가
- 값 중심의 불변성(Immurable) 객체
public record GiveItemRequest(int itemId, int itemCount);
C# 레코드(record) 타입 문법을 사용한 불변(Immutable) 데이터 모델을 정의한다.
간단히 말하자면 요청을 표현하는 데이터 전용 객체(DTO)를 아주 간결하게 표현한 것이다.
위에 코드를 풀어서 작성해 보자면, 이러한 형태가 된다.
public class GiveItemRequest
{
public int itemId { get; init; }
public int itemCount { get; init; }
public GiveItemRequest(int itemId, int itemCount) =>
(itemId, itemCount) = (itemId, itemCount);
// Equals, GetHashCode, ToString 등도 자동구현
}
record를 사용하면 다음과 같은 클래스를 자동으로 만들어준다.
왜 record를 써야 할까?
- 불변성 : init 속성만 제공해 값 변경 불가 > 안전한 데이터 객체 생성
- 값 기반 비교 : Equals()와 == 가 내용을 기준으로 비교함
- ToString() 자동 생성 : 디버깅, 로깅에 유용
- 복사 편리 : with 키워드로 불변 객체 복사 쉽게 가능
- DTO에 최적화 : API 요청/응답 모델 등 "값을 담는 그릇"에 적합
언제 사용하나요?
- Web API 요청/응답 DTO
- Command / Query 객체 (CQRS 패턴)
- 메시지 큐 전송 객체
- 유닛 테스트용 입력값 모델
정리하자면
- record 키워드는 간결하고 안전한 값 중심의 데이터 모델을 정의하는 방식을 제공한다.
- 주로 요청 DTO, 커맨드 객체, 메시지 객체로 사용된다.
함께 읽으면 좋은 글
C# Record Explained - NDepend Blog
A C# record is a C# class with special syntax and behaviors generated by the compiler to make it better suited for data-centric scenarios.
blog.ndepend.com
'프로그래밍 > C#' 카테고리의 다른 글
Entity Framework에서 [NotMapped] 속성 (0) | 2025.04.26 |
---|---|
C# is 패턴 매칭(Pattern Matching)에 대해서 알아보자 (0) | 2025.04.26 |
JWT를 활용해서 C# 서버에서 사용자 인증 처리하기 (0) | 2025.04.23 |
ASP.NET Core HTTP 요청 처리 흐름 알아보기 (0) | 2025.04.23 |
C# 환경변수로 appsettings.json 값 덮어쓰기 (0) | 2025.04.12 |
댓글