c#

C# 프로그래밍 - 생성자와 소멸자

디지털콘텐츠크리에이터 2023. 9. 11. 04:02

C# 프로그래밍 - 생성자와 소멸자

생성자 (Constructor)

생성자는 클래스의 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 클래스 내부에 정의된 클래스와 동일한 이름을 갖는 맴버함수로 주로 객체의 초기화 작업을 수행하는 데 사용됩니다(객체의 필드를 초기화하거나 초기 상태를 설정)

 

생성자 선언 예시

생성자는 클래스의 이름과 동일하며 반환 유형을 가지지 않습니다.

class Person
{
    public string Name;
    public int Age;

    public Person()
    {
        Name = "Unknown";
        Age = 0;
    }
}

 

 

객체 생성과 생성자 호출

타입 변수명 = new 타입 ():

객체를 생성할때(클래스가 인스턴스화될때) new 키워드를 사용하여 클래스 내부에 선언한 생성자를 호출하고 메모리 힙(heap)에 오브젝트를 생성합니다.

 

class Program
{
    static void Main()
    {
        Person person = new Person();
        Console.WriteLine($"이름: {person.Name}, 나이: {person.Age}");
    }
}

 

인스턴스 생성자
https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/instance-constructors?redirectedfrom=MSDN

 

 

매개변수가 있는 생성자와 오버로딩

생성자는 매개변수를 가질수있으며 오브젝트를 생성하는 동시에 클래스 내부의 특정 맴버 변수를 초기화하는데 사용할수있습니다. 또한 매개변수의 타입과 개수에 따라서 생성자를 오버로딩하여 다양한 초기화 옵션을 제공할 수 있습니다.

 

class Person
{
    public string Name;
    public int Age;

    public Person()
    {
        Name = "Unknown";
        Age = 0;
    }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

}

 

 

class Program
{
    static void Main()
    {
        Person person1 = new Person();
        Person person2 = new Person("Alice", 25);
        
        Console.WriteLine($"이름: {person1.Name}, 나이: {person1.Age}");
        Console.WriteLine($"이름: {person2.Name}, 나이: {person2.Age}");
    }
}

 

 

기본 생성자(default constructor)

만약 클래스 내에 생성자를 명시적으로 정의하지않으면 C# 컴파일러가 매개변수가 없는 기본 생성자(default constructor)를 자동으로 생성합니다.
기본 생성자가 반환하는 기본값
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/default-values?redirectedfrom=MSDN

 

소멸자 (Destructor)

생성자와 반대로 오브젝트가 제거될때 자동으로 호출됩니다.  객체가 메모리에서 해제되기 직전에 호출되는 특별한 메서드로 ~ 기호를 사용하여 클래스와 동일한 이름으로 클래스 내에 정의합니다.

한개의 클래스는 오직 한개의 소멸자를 가질수있으며 소멸자는  파라미터를 가질수없습니다. C#에서는 개체가 더 이상 참조되지 않을 때 가비지 컬렉터(GC)가 자동으로 메모리 해제를 처리하므로 일반적인 경우 명시적인 소멸자를 사용하지않습니다(Dispose 메서드 활용)

class MyClass
{
   
    public MyClass()
    {
        Console.WriteLine("객체가 생성됩니다.");
    }

    ~MyClass()
    {
        Console.WriteLine("객체가 제거됩니다.");
    }
}

class Program
{
    static void Main()
    {
        MyClass myObject = new MyClass();
        myObject.Dispose();
    }
}