C# 프로그래밍 - 생성자와 소멸자
- c#
- 2023. 9. 11.
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}");
}
}
매개변수가 있는 생성자와 오버로딩
생성자는 매개변수를 가질수있으며 오브젝트를 생성하는 동시에 클래스 내부의 특정 맴버 변수를 초기화하는데 사용할수있습니다. 또한 매개변수의 타입과 개수에 따라서 생성자를 오버로딩하여 다양한 초기화 옵션을 제공할 수 있습니다.
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();
}
}
'c#' 카테고리의 다른 글
C# 프로그래밍 - new 키워드 (0) | 2023.09.12 |
---|---|
C# 프로그래밍 - 속성(property) (0) | 2023.09.11 |
C# 프로그래밍 - 클래스 상속(Inheritance) (0) | 2023.09.10 |
C# 프로그래밍 - 데이터 형식 변환 및 캐스팅(Data Type Convertion) (0) | 2023.09.04 |
프로그래밍에서 코드 작성시 영문 텍스트 표기법 종류(Uppercase, Lowercase, Pascal Case, Camel Case) (0) | 2023.06.22 |