코젤브

C# [Required] vs required 차이점 본문

컴공의 일상/C#

C# [Required] vs required 차이점

코딩하는 젤리 2024. 4. 22. 01:15

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#' 카테고리의 다른 글

namespace 란?  (0) 2024.04.17
C# 공부 시작!  (0) 2024.04.11