0Pricing
C# Academy · 강의

required 한정자

호출자가 필수 속성을 설정하도록 강제합니다.

required 한정자은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

required 수정자

required 수정자는 호출자가 개체를 만들 때 속성 또는 필드를 설정하도록 강제합니다. 「값을 빠뜨렸습니다」라는 오류가 실행 시간이 아닌 컴파일 시간에 발생하도록 합니다.

using System;

class Person {
    public required string Name { get; init; }
}

var p = new Person { Name = "Ada" };
Console.WriteLine(p.Name); // Ada

required 멤버를 생략하면 컴파일되지 않습니다

호출자가 required 멤버를 생략하면 프로그램이 실행되기 전에 컴파일러가 오류를 보고합니다.

using System;

class Person {
    public required string Name { get; init; }
}

// var bad = new Person { }; // compile error: Name is required
var good = new Person { Name = "Lin" };
Console.WriteLine(good.Name); // Lin

required와 초기화

required는 초기화와 자연스럽게 함께 사용할 수 있습니다. 생성할 때 값을 제공해야 하며 이후에는 변경할 수 없습니다.

using System;

class Config {
    public required string Url { get; init; }
    public int Timeout { get; init; } = 30;
}

var c = new Config { Url = "https://api" };
Console.WriteLine(c.Url + " " + c.Timeout); // https://api 30

required와 설정

설정 가능한 속성도 required로 지정할 수 있습니다. 반드시 초기화해야 하지만 이후에는 변경할 수 있습니다.

using System;

class Box {
    public required int Size { get; set; }
}

var b = new Box { Size = 5 };
b.Size = 10; // still mutable
Console.WriteLine(b.Size); // 10

required 필드

속성뿐 아니라 필드도 required로 지정할 수 있습니다.

using System;

class Token {
    public required string Value;
}

var t = new Token { Value = "abc123" };
Console.WriteLine(t.Value); // abc123

생성자와 required

생성자가 required 멤버를 설정한다면 해당 생성자를 사용하는 호출자는 더 이상 그 멤버를 설정할 필요가 없습니다. 컴파일러에 이를 알리려면 [SetsRequiredMembers]를 사용하세요.

using System;
using System.Diagnostics.CodeAnalysis;

class Person {
    public required string Name { get; init; }
    [SetsRequiredMembers]
    public Person(string name) => Name = name;
}

Console.WriteLine(new Person("Sam").Name); // Sam

required와 선택 사항 혼합하기

필수로 표시한 멤버만 반드시 필요하며, 나머지 멤버는 기본값을 사용하는 선택 사항으로 남습니다.

using System;

class Account {
    public required string Owner { get; init; }
    public decimal Balance { get; init; } = 0m;
}

var a = new Account { Owner = "Kai" };
Console.WriteLine(a.Owner + " " + a.Balance); // Kai 0

상속에서의 required

required 멤버는 상속됩니다. 파생 클래스에서 자체 required 멤버를 추가할 수 있으며, 모든 필수 멤버를 충족해야 합니다.

using System;

class Base { public required int Id { get; init; } }
class Item : Base { public required string Name { get; init; } }

var i = new Item { Id = 1, Name = "Pen" };
Console.WriteLine(i.Id + " " + i.Name); // 1 Pen

복잡한 생성자 대체하기

required + init은 복잡한 생성자를 대체하는 경우가 많습니다. 읽기 쉬운 개체 초기화 구문으로 필수 멤버를 지정할 수 있습니다.

using System;

class Email {
    public required string To { get; init; }
    public required string Subject { get; init; }
    public string Body { get; init; } = "";
}

var e = new Email { To = "a@b.com", Subject = "Hi" };
Console.WriteLine(e.To + " | " + e.Subject); // a@b.com | Hi

의도를 스스로 설명하기

멤버를 required로 표시하면 어떤 값이 필수인지 문서화되므로 해당 형식을 올바르게 사용하기 쉬워집니다.

using System;

class Registration {
    public required string Username { get; init; }
    public required string Password { get; init; }
    public bool Newsletter { get; init; }
}

var r = new Registration { Username = "ada", Password = "x" };
Console.WriteLine(r.Username); // ada

함께 적용하기

required, 선택 사항, 유효성 검사가 적용된 멤버를 결합한 형식입니다.

using System;

class Server {
    public required string Host { get; init; }
    public int Port { get; init; } = 8080;
    public string Address => Host + ":" + Port;
}

var s = new Server { Host = "localhost" };
Console.WriteLine(s.Address); // localhost:8080

빠른 확인

required 수정자가 무엇을 보장하는지 확인하세요.

요약

required 수정자를 배웠습니다.

  • 생성할 때 호출자가 멤버를 초기화하도록 강제하며, 컴파일러가 이를 확인합니다.
  • init과 함께 사용하면 필수이면서 변경 불가능한 멤버를 만들 수 있습니다.
  • [SetsRequiredMembers]를 사용하면 생성자가 해당 요구 사항을 충족할 수 있습니다.
  • required 멤버는 상속됩니다.

자주 묻는 질문

“required 한정자” 강의는 무료인가요?

네 — “required 한정자” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“required 한정자”에서 뭘 배우나요?

호출자가 필수 속성을 설정하도록 강제합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C# Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“required 한정자” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. init 전용 setter
  2. required 한정자
  3. 변경 불가능한 객체 패턴
  4. 레코드의 with 식
← C# Academy(으)로 돌아가기