C#/클래스와 객체지향
C# 클래스와 객체지향 - 07. 생성자와 소멸자
tita
2024. 5. 28. 15:39
생성자(Constructor)는 무언가 생성할 때 자동으로 호출되는 메서드입니다.
생성자의 종류는 많지만 우선 인스턴스 생성자에 대해서 알아보겠습니다.
인스턴스 생성자는 인스턴스를 생성할 때 자동으로 호출되는 메서드로 다음과 같은 조건이 있습니다.
- 이름은 클래스 이름과 같아야 합니다.
- 접근 제한자는 public 이어야 합니다.
- 반화과 관련된 선언을 하지 않아야 합니다.
다음과 같은 형태가 됩니다.
public [클래스 이름] ([매개변수])
{
}
생성자는 일반적으로 인스턴스 변수를 초기화하는 일을 합니다.
간단한 예제를 살펴보겠습니다.
class Program
{
class Product
{
public static int counter = 0;
public int id;
public string name;
public int price
public Product(stirng name, int price)
{
Product.counter = counter + 1;
this.id = counter;
this.name = name;
this.price = price;
}
}
static void Main(string[] args)
{
Product productA = new Product("감자", 2000);
Product productB = new Product("고구마", 3000);
Console.WriteLine(productA.id + " : " + productA.name);
Console.WriteLine(productB.id + " : " + productB.name);
Console.WriteLine(Product.counter + "개 생성되었습니다. ");
}
}
/*
[실행 결과]
1:감자
2:고구마
2개 생성되었습니다.
*/
생성자로 클래스의 인스턴스를 만들 수 없게 할 때는 private 생성자를 사용합니다.
class Program
{
class Hidden
{
private Hidden() { }
}
static void Main(string[] args)
{
Hidden hidden = new Hidden(); // 오류가 발생합니다.
}
}
[소멸자]
생성자는 인스턴스가 생성될 때 실행되는 메서드입니다. 그와 반대로 인스턴스가 소멸될 때에 호출되는 소멸자(Destructor) 가 있습니다.
C#은 변수가 더 이상 사용되지 않을 것이 확실할 때 객체를 소멸시키며 소멸자를 호출합니다.
소멸자를 만드는 것에도 규칙이 존재합니다.
- 이름은 클래스 이름 앞에 ~ 기호가 붙은 것이어야 합니다.
- 접근 제한자를 사용하지 않습니다.
- 반환과 관련된 선언을 하지 않습니다.
- 매개변수와 관련된 선언을 하지 않습니다.
- 하나의 클래스에는 하나의 소멸자만 있을 수 있습니다.
따라서 아래의 형식이 됩니다.
~[클래스 이름]()
{
}
소멸자를 사용하는 코드로 객체 소멸의 출력을 하게 작성해보겠습니다.
class Program
{
class Product
{
public string name;
public int price;
public Product(string name, int price)
{
this.name = name;
this.price = price;
}
~Product()
{
Console.WriteLine(this.name + "의 소멸자 호출");
}
}
static void Main(string[] args)
{
Product product = new Product("과자", 1000);
}
}
/*
[실행 결과]
과자의 소멸자 호출
*/