Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 백준
- asp.net core
- 탐색
- C++
- Get
- 스택
- 도커
- 재귀
- Docker
- 자료구조
- 파이썬
- mysql
- 큐
- .net core
- .NET
- .net maui
- sql
- 시간복잡도
- quick sort
- REDIS
- dfs
- BFS
- docker-compose
- 알고리즘
- API
- asp.net
- C#
- maui
- 정렬
- Merge Sort
Archives
- Today
- Total
코젤브
C# [Required] vs required 차이점 본문
ASP.NET core 를 활용해서 프로젝트를 진행하는 중에 DTO 작성 시 계속 노란줄이 생겨서.. 스트레스 받았다...
경고인데, 아래와 같다.
Non-nullable property 'HiveToken' must contain a non null value when exiting constructor.
Consider declaring the property as nullable.
그래서 [Required] 달아줬는데, required 로 해야지 해결되는 경우가 많아서. 아니 대체 두개 차이가 뭔데? 라는 생각과 함께 쓰는 블로그이다.
[Required] 어트리뷰트와 required 키워드 사이의 차이
- ASP.NET Core에서 데이터 검증과 모델 구성에 중요함!
- 여기서 언급된 두 용어는 서로 다른 문맥에서 사용되는데, 각각의 사용법과 적용 방식을 설명하겠습니다.
[Required] 어트리뷰트 (Attribute)
- [Required]는 System.ComponentModel.DataAnnotations 네임스페이스에서 제공하는 어트리뷰트입니다.
- 이 어트리뷰트는 주로 데이터 모델이나 DTO(Data Transfer Object)의 프로퍼티에 적용되어, 해당 프로퍼티가 반드시 필요하다는 것을 명시합니다.
- 모델 검증 시 ASP.NET Core의 MVC 모델 바인딩에서 해당 필드가 비어 있지 않아야 함을 검증할 때 사용
- 예를 들어, 사용자 입력 폼에서 필수 정보가 누락되지 않도록 하는 데 사용됩니다.
public class GameModel
{
[Required]
public string GameName { get; set; }
}
위 코드에서 GameName 프로퍼티는 사용자가 폼을 제출할 때 반드시 값을 제공해야 합니다. 이 값이 제공되지 않으면, 모델 검증이 실패하고 사용자에게 오류 메시지가 표시될 수 있습니다.
required 키워드
- C# 9.0부터 도입된 required 키워드는 주로 레코드 타입에서 사용됩니다.
- 레코드 : 불변성을 가진 객체를 간단히 정의할 수 있게 해주는 새로운 타입 선언 방식
- required 키워드는 해당 필드가 레코드 생성자에서 반드시 초기화되어야 함을 명시합니다.
- 이를 통해 객체의 일관성을 보장하고, 필수 필드가 누락되지 않도록 합니다.
위 코드에서 GameRecord의 인스턴스를 생성할 때 GameName 프로퍼티는 반드시 값을 할당받아야 합니다. 그렇지 않으면 컴파일 타임에 오류가 발생합니다.
요약하면, [Required] 어트리뷰트는 런타임에 데이터의 유효성을 검사하는 데 사용되며, 주로 폼 데이터의 유효성 검증에 적용됩니다. 반면, required 키워드는 컴파일 시간에 필수 필드가 누락되지 않도록 강제하는 데 사용되며, 주로 레코드 타입의 불변성을 보장하는 데에 사용됩니다.
'컴공의 일상 > C#' 카테고리의 다른 글
[Blazor] 컴포넌트 소개 및 활용 (0) | 2024.07.15 |
---|---|
[Redis] Redis란? 설치 및 시작과 기본 명령어 (0) | 2024.07.10 |
[API Server] MVC 패턴과 Service, Repository (0) | 2024.07.09 |
namespace 란? (0) | 2024.04.17 |
C# 공부 시작! (0) | 2024.04.11 |