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 식에 대한 자세한 내용은 기능 제안 노트를 참조하세요.
참고 항목
.NET