다음을 통해 공유


new 연산자 - new 연산자는 형식의 새 인스턴스를 만듭니다.

new 연산자는 새 유형의 인스턴스를 만듭니다. new 키워드를 멤버 선언 한정자 또는 제네릭 형식 제약 조건으로 사용할 수도 있습니다.

C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.

설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.

팁 (조언)

C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.

생성자 호출

형식의 새 인스턴스를 만들려면 연산자를 사용하여 new 해당 형식의 생성자 중 하나를 호출합니다.

var dict = new Dictionary<string, int>();
dict["first"] = 10;
dict["second"] = 20;
dict["third"] = 30;

Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30

다음 예제와 같이 연산자와 함께 new를 사용하여 하나의 명령문에서 개체를 인스턴스화하고 초기화할 수 있습니다.

var dict = new Dictionary<string, int>
{
    ["first"] = 10,
    ["second"] = 20,
    ["third"] = 30
};

Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30

대상 형식 new

생성자 호출 식은 대상 형식입니다. 즉, 식의 대상 형식을 알고 있는 경우 다음 예제와 같이 형식 이름을 생략할 수 있습니다.

List<int> xs = new();
List<int> ys = new(capacity: 10_000);
List<int> zs = new() { Capacity = 20_000 };

Dictionary<int, List<int>> lookup = new()
{
    [1] = new() { 1, 2, 3 },
    [2] = new() { 5, 8, 3 },
    [5] = new() { 1, 0, 4 }
};

앞의 예제와 같이 항상 대상 형식 new 식에서 괄호를 사용합니다.

new 식의 대상 형식을 알 수 없는 경우(예를 들어 var 키워드를 사용하는 경우) 형식 이름을 지정해야 합니다.

배열 생성

또한 다음 예제와 같이 new 연산자를 사용하여 배열 인스턴스를 만듭니다.

var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30

배열 초기화 구문을 사용하여 배열 인스턴스를 만들고 하나의 명령문에 요소를 채웁니다. 다음 예제에서는 이를 수행하는 다양한 방법을 보여줍니다.

var a = new int[3] { 10, 20, 30 };
var b = new int[] { 10, 20, 30 };
var c = new[] { 10, 20, 30 };
Console.WriteLine(c.GetType());  // output: System.Int32[]

배열에 대한 자세한 내용은 배열을 참조하세요.

익명 형식의 인스턴스화

익명 형식의 인스턴스를 만들려면 new 연산자와 개체 이니셜라이저 구문을 사용합니다.

var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!

형식 인스턴스의 소멸

이전에 만든 형식 인스턴스를 삭제할 필요가 없습니다. 시스템은 참조 및 값 형식의 인스턴스를 자동으로 삭제합니다. 시스템은 값 형식이 포함된 컨텍스트가 제거되는 즉시 값 형식의 인스턴스를 삭제합니다. 가비지 수집기는 참조 형식에 대한 마지막 참조가 제거된 후 지정되지 않은 시간에 참조 형식의 인스턴스를 삭제합니다.

파일 핸들과 같이 관리되지 않는 리소스가 포함된 형식 인스턴스의 경우 결정적 정리를 사용하여 리소스가 가능한 한 빨리 해제되도록 합니다. 자세한 내용은 API 참조 및 System.IDisposable 문서를 참조 using 하세요.

연산자 오버로드 가능성

사용자 정의 형식은 new 연산자를 오버로드할 수 없습니다.

C# 언어 사양

자세한 내용은 C# 언어 사양new 연산자 섹션을 참조하세요.

대상으로 형식화된 new 식에 대한 자세한 내용은 기능 제안 노트를 참조하세요.

참고 항목