생성자(C# 프로그래밍 가이드)Constructors (C# Programming Guide)

class 또는 struct를 만들 때마다 해당 생성자가 호출됩니다.Whenever a class or struct is created, its constructor is called. 클래스 또는 구조체에는 서로 다른 인수를 사용하는 여러 생성자가 있을 수 있습니다.A class or struct may have multiple constructors that take different arguments. 프로그래머는 생성자를 통해 기본값을 설정하고, 인스턴스화를 제한하며, 유연하고 읽기 쉬운 코드를 작성할 수 있습니다.Constructors enable the programmer to set default values, limit instantiation, and write code that is flexible and easy to read. 자세한 내용 및 예제는 생성자 사용인스턴스 생성자를 참조하세요.For more information and examples, see Using Constructors and Instance Constructors.

매개 변수 없는 생성자Parameterless constructors

클래스에 대한 생성자를 제공하지 않으면 C#이 기본적으로 개체를 인스턴스화하고 멤버 변수를 C# 형식의 기본값에 나열된 기본값으로 설정하는 생성자를 새로 만듭니다.If you don't provide a constructor for your class, C# creates one by default that instantiates the object and sets member variables to the default values as listed in the Default values of C# types article. 구조체에 대한 생성자를 제공하지 않으면 C#이 암시적 매개 변수 없는 생성자를 사용하여 각 필드를 자동으로 기본값으로 초기화합니다.If you don't provide a constructor for your struct, C# relies on an implicit parameterless constructor to automatically initialize each field to its default value. 자세한 내용 및 예제는 인스턴스 생성자를 참조하세요.For more information and examples, see Instance constructors.

생성자 구문Constructor syntax

생성자는 이름이 해당 형식의 이름과 동일한 메서드입니다.A constructor is a method whose name is the same as the name of its type. 해당 메서드 시그니처에는 메서드 이름과 매개 변수 목록만 포함되고 반환 형식은 포함되지 않습니다.Its method signature includes only the method name and its parameter list; it does not include a return type. 다음 예제에서는 Person이라는 클래스에 대한 생성자를 보여 줍니다.The following example shows the constructor for a class named Person.

public class Person
{
   private string last;
   private string first;
   
   public Person(string lastName, string firstName)
   {
      last = lastName;
      first = firstName;
   }
   
   // Remaining implementation of Person class.
}

생성자를 단일 문으로 구현할 수 있는 경우 식 본문 정의를 사용할 수 있습니다.If a constructor can be implemented as a single statement, you can use an expression body definition. 다음 예제에서는 생성자에 name이라는 단일 문자열 매개 변수가 있는 Location 클래스를 정의합니다.The following example defines a Location class whose constructor has a single string parameter named name. 식 본문 정의에서 locationName 필드에 인수를 할당합니다.The expression body definition assigns the argument to the locationName field.

public class Location
{
   private string locationName;
   
   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   } 
}

정적 생성자Static constructors

앞의 예제에서는 새 개체를 만드는 인스턴스 생성자를 모두 보여 주었습니다.The previous examples have all shown instance constructors, which create a new object. 클래스 또는 구조체에 형식의 정적 멤버를 초기화하는 정적 생성자도 있을 수 있습니다.A class or struct can also have a static constructor, which initializes static members of the type. 정적 생성자에는 매개 변수가 없습니다.Static constructors are parameterless. 정적 필드를 초기화하는 정적 생성자를 제공하지 않으면 C# 컴파일러는 정적 필드를 C# 형식의 기본값에 나열된 기본값으로 초기화합니다.If you don't provide a static constructor to initialize static fields, the C# compiler initializes static fields to their default value as listed in the Default values of C# types article.

다음 예제에서는 정적 생성자를 사용하여 정적 필드를 초기화합니다.The following example uses a static constructor to initialize a static field.

public class Adult : Person
{
   private static int minimumAge;
   
   public Adult(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Adult()
   {
      minimumAge = 18;
   }

   // Remaining implementation of Adult class.
}

다음 예제와 같이 식 본문 정의를 사용하여 정적 생성자를 정의할 수도 있습니다.You can also define a static constructor with an expression body definition, as the following example shows.

public class Child : Person
{
   private static int maximumAge;
   
   public Child(string lastName, string firstName) : base(lastName, firstName)
   { }

   static Child() => maximumAge = 18;

   // Remaining implementation of Child class.
}

자세한 내용 및 예제는 정적 생성자를 참조하세요.For more information and examples, see Static Constructors.

섹션 내용In This Section

생성자 사용Using Constructors

인스턴스 생성자Instance Constructors

전용 생성자Private Constructors

정적 생성자Static Constructors

복사 생성자 작성 방법How to write a copy constructor

참조See also