new 연산자(C# 참조)new operator (C# reference)

new 연산자는 새 유형의 인스턴스를 만듭니다.The new operator creates a new instance of a type.

new 키워드를 멤버 선언 한정자 또는 제네릭 형식 제약 조건으로 사용할 수도 있습니다.You can also use the new keyword as a member declaration modifier or a generic type constraint.

생성자 호출Constructor invocation

새 인스턴스 유형을 만들려면 일반적으로 new 연산자를 사용하여 해당 유형의 생성자 중 하나를 호출합니다.To create a new instance of a type, you typically invoke one of the constructors of that type using the new operator:

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 연산자와 함께 개체 또는 컬렉션 이니셜라이저를 사용하여 하나의 명령문에서 개체를 인스턴스화하고 초기화할 수 있습니다.You can use an object or collection initializer with the new operator to instantiate and initialize an object in one statement, as the following example shows:

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

배열 생성Array creation

또한 다음 예제와 같이 new 연산자를 사용하여 배열 인스턴스를 만듭니다.You also use the new operator to create an array instance, as the following example shows:

var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;

Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30

배열 초기화 구문을 사용하여 배열 인스턴스를 만들고 하나의 명령문에 요소를 채웁니다.Use array initialization syntax to create an array instance and populate it with elements in one statement. 다음 예제에서는 이를 수행하는 다양한 방법을 보여줍니다.The following example shows various ways how you can do that:

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[]

배열에 대한 자세한 내용은 배열을 참조하세요.For more information about arrays, see Arrays.

익명 형식의 인스턴스화Instantiation of anonymous types

익명 형식의 인스턴스를 만들려면 new 연산자와 개체 이니셜라이저 구문을 사용합니다.To create an instance of an anonymous type, use the new operator and object initializer syntax:

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

형식 인스턴스의 소멸Destruction of type instances

앞서 만든 형식 인스턴스를 제거할 필요가 없습니다.You don't have to destroy earlier created type instances. 참조 형식과 값 형식 모두의 인스턴스는 자동으로 제거됩니다.Instances of both reference and value types are destroyed automatically. 값 형식의 인스턴스는 포함된 컨텍스트가 제거되는 즉시 제거됩니다.Instances of value types are destroyed as soon as the context that contains them is destroyed. 참조 유형의 인스턴스는 마지막 참조가 제거된 후 지정되지 않은 시간에 가비지 수집기에 의해 제거됩니다.Instances of reference types are destroyed by the garbage collector at unspecified time after the last reference to them is removed.

파일 핸들과 같이 관리되지 않은 리소스를 포함하는 형식 인스턴스의 경우에는 결정적 정리를 사용하여 포함된 리소스가 가능한 빨리 릴리스되도록 하는 것이 좋습니다.For type instances that contain unmanaged resources, for example, a file handle, it's recommended to employ deterministic clean-up to ensure that the resources they contain are released as soon as possible. 자세한 내용은 System.IDisposable API 참조 및 명령문 사용 문서를 참조하세요.For more information, see the System.IDisposable API reference and the using statement article.

연산자 오버로드 가능성Operator overloadability

사용자 정의 형식은 new 연산자를 오버로드할 수 없습니다.A user-defined type cannot overload the new operator.

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양new 연산자 섹션을 참조하세요.For more information, see The new operator section of the C# language specification.

참조See also