IRONSOFTWAREHOME

C# 속성 이해하기

C# 속성 이해하기

Tim Corey

9분 50초

.NET 7과 함께 도입된 C# 11은 속성에 흥미로운 기능인 required 키워드를 추가했습니다. 이 글에서는 Tim Corey의 간결한 비디오 튜토리얼 " .NET 7 업데이트: 10분 안에 배우는 필수 속성 "의 예제를 사용하여 C# 속성에 대해 살펴보겠습니다. 속성의 기본 사항부터 새롭게 추가된 필수 키워드와 그것이 초기화 규칙을 적용하는 데 어떻게 도움이 되는지까지 모든 것을 자세히 살펴보겠습니다.

C# 속성

C#에서 속성을 사용하면 필드를 캡슐화하고 객체의 클래스 데이터 멤버에 대한 액세스를 관리할 수 있습니다. 일반적으로 외부 접근을 허용하면서 데이터 무결성을 보장하는 데 사용됩니다. 비공개 필드는 속성을 사용하여 캡슐화할 수 있으며, 이를 통해 데이터에 접근하거나 수정하는 방식을 제어할 수 있습니다. 공용 문자열 속성은 클래스 멤버를 효율적으로 조작하기 위해 접근자(get 및 set)라고 하는 특수 메서드를 사용하는 경우가 많습니다. C#의 정적 속성은 클래스를 인스턴스화하지 않고도 접근할 수 있으므로 속성 값을 관리하는 독특한 방법을 제공합니다.

다음은 Tim이 간단한 부동산 예시를 통해 설명하는 방법입니다.

콘솔 애플리케이션 만들기

먼저 Tim은 C# 11을 사용하여 기본적인 .NET 7 콘솔 애플리케이션을 만듭니다. 이 버전에서는 이전 .NET 버전에는 없었던 required 키워드가 도입되었습니다.

간단한 모델 정의하기

Tim은 PersonModel 클래스에 FirstNameLastName 속성을 추가합니다:

public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

이 속성들은 PersonModel이(가) 이름과 성을 저장할 수 있도록 허용합니다. 그러나 추가 설정 없이 FirstNameLastName이(가) 초기화되지 않고 null 값을 가질 수 있습니다.

생성자를 사용하여 초기화를 보장하는 방법

속성이 항상 초기화되도록 보장하는 일반적인 방법은 생성자를 이용하는 것입니다. Tim의 예제에서는 PersonModel 기본 클래스에 두 가지 FirstNameLastName을 요구하는 생성자를 추가합니다:

public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}

이 접근 방식은 PersonModel 객체가 생성될 때 FirstNameLastName이(가) 반드시 제공되어야 한다는 것을 보장합니다. 이 값을 지정하지 않고 PersonModel을 만들려고 하면, 컴파일러가 오류로 표시할 것입니다.

널 허용 컨텍스트

.NET 6과 C# 10부터 C#은 nullable 참조 유형을 도입했습니다. 이는 속성을 초기화하거나 ?를 사용해서 명시적으로 nullable로 표시해야 함을 의미합니다. 예를 들어, FirstNameLastName이(가) null이 될 수 있는 경우 다음과 같이 정의합니다:

public string? FirstName { get; set; }
public string? LastName { get; set; }

그러나 Tim의 예제에서는 FirstNameLastName이(가) 항상 null이 아닌 것으로 가정합니다. 초기에는 null 허용 여부를 신중한 초기화 또는 nullable 어노테이션으로 처리했지만, C# 11부터는 더욱 강력한 옵션을 사용할 수 있게 되었습니다.

필수 키워드를 소개합니다

생성자가 초기화를 강제할 수 있는 반면, C# 11은 required 키워드를 도입하여 특정 속성이 설정되었는지 확인하기 쉽게 만듭니다. required을 사용하면 개별 속성을 필수로 표시할 수 있으며 이는 객체 초기화 중에 반드시 값이 할당되어야 함을 의미합니다.

필수 속성 설정

필수 속성으로 FirstNameLastName을 만들기 위해 Tim은 4:15에 PersonModel 클래스를 다음과 같이 수정합니다:

public class PersonModel
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}

이 속성을 required로 표시하면 컴파일러가 객체 이니셜라이저나 생성자를 통해 설정되어야 한다고 강제하게 됩니다. 이 방법은 생성자를 만들 필요 없이 특정 속성을 요구할 수 있기 때문에 유용합니다.

필수 속성을 사용한 예시

이제 PersonModel을 다음과 같이 생성하고 초기화할 수 있습니다:

PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };

FirstName 또는 LastName을 생략하면, 컴파일러는 오류를 표시하며 이러한 필수 속성을 초기화하도록 요청합니다.

생성자와 함께 필수 사용하기

Tim은 required 속성과 생성자가 둘 다 사용되는 경우를 시연합니다. 생성자가 필수 속성을 설정하는 경우, C#은 생성자가 호출될 때 해당 속성이 여전히 초기화되어 있는지 확인해야 합니다.

이런 경우 SetsRequiredMembers 속성은 생성자가 필수 조건을 충족함을 신호로 사용할 수 있습니다. 팀이 이를 적용하는 방법은 다음과 같습니다.

[SetsRequiredMembers]
public PersonModel()
{
    FirstName = "Test";
    LastName = "Test";
}

[SetsRequiredMembers]
public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}

SetsRequiredMembers을 추가하면 컴파일러에게 이러한 속성이 생성자 내에서 설정될 것임을 알리고 초기화 오류를 피합니다. 이 기능은 속성을 초기화하는 방식에 유연성을 제공하면서 실수로 인한 누락을 방지하는 데 도움이 됩니다.

필수 속성이 유용한 이유는 무엇일까요?

Tim은 새로운 required 키워드가 속성이 항상 설정될 수 있도록 하는 과정을 간소화한다고 설명합니다. 이제 모든 경우에 set 메서드에 대한 생성자가 필요하거나 설정되지 않은 속성이 발생할 위험을 감수할 필요 없이, 속성 선언에서 특정 값을 직접 요구하는 간단한 방법을 사용할 수 있습니다.

이 기능은 특정 필드가 필수인 데이터 모델에서 특히 유용하며, 런타임 시 null 오류를 방지하여 개발 과정 초기에 문제를 파악하는 데 도움이 됩니다.

추가 속성 예시

Tim은 nullable일 수 있는 선택 속성 Email을 추가했습니다:

public string? Email { get; set; }

required로 표시되지 않았기 때문에 Email 속성은 컴파일러 오류 없이 설정되지 않은 상태로 남을 수 있습니다. 이 예시를 통해 Tim은 필수 데이터 필드와 선택적 데이터 필드를 명확하게 구분한 클래스가 얼마나 유연하게 작동할 수 있는지 보여주었습니다.

결론

C# 11에 필수 속성이 추가된 것은 개발자에게 매우 유용한 기능으로, 필수 속성이 항상 초기화되도록 보장합니다. 팀 코리의 영상은 이 기능에 대한 훌륭한 소개를 제공하며 콘솔 애플리케이션 내에서 어떻게 작동하는지 보여줍니다. required 키워드를 객체 이니셜라이저 및 생성자와 결합함으로써 C#에서 더 견고하고 안전한 데이터 모델을 만들 수 있습니다. 더 자세한 튜토리얼을 보시려면 Tim의 YouTube 채널을 방문하세요.

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

OR
bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.