728x90
반응형
생성자
C# 클래스에는 생성자라는 메서드가 존재한다.
이 생성자의 역할은 객체가 생성되는 순간에 메서드를 실행시킨다.
생성자를 정의하는 방법은 클래스 안에 접근제한자와 클래스명을 명시해주고 반환값이 없는 메서드를 생성해주면 된다.
따라서 다음 코드와 같이 작성할 수 있다.
using System;
namespace ConsoleApp1
{
class Student
{
public string name = "enchupin";
public int ID = 20230817;
public Student(string n)
{
Console.WriteLine("이름 : "+n);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("student 객체를 생성하기 전");
Student student = new Student("ENCHUPIN");
Console.WriteLine("student 객체를 생성한 후");
}
}
}
만약 클래스 내부에 생성자를 선언하지 않는다면 컴파일러는 클래스에 빈 생성자를 만들어 낸 후 코드를 실행한다.
따라서 위 코드에서는 생성자를 선언하여 빈 클래스가 생성되지 않았으므로 매개변수가 없는 Student 클래스의 생성자는 없다.
그러므로 student 객체를 생성할 때 인자를 전달해주지 않는다면 오류가 발생할 것이다.
소멸자
객체가 생성된 후로 사용하지 않을 때에도 메모리를 계속 할당해준다면 이것은 틀림없는 메모리의 낭비일 것이다.
따라서 GC(Garbage Collector)에서 해당 데이터를 사용하지 않는다고 판단되면 메모리를 해제시킨다.
그러나 이것은 사용 여부가 불확실할 때에도 메모리 정리를 할 수 있기때문에 소멸자를 정의할 때에는
주의를 기울일 필요가 있다.
소멸자를 선언하는 방법은 클래스 내부에 물결표시와 클래스 명을 명시해주면 된다.
이를 적용해보면 다음과 같이 코드를 작성해 볼 수 있다.
using System;
namespace ConsoleApp1
{
public class AllFunc
{
public void writefunc(string name) {
Console.WriteLine("이름 : "+name); }
public void writefunc(int ID) {
Console.WriteLine("학번 : " + ID); }
public void writefunc(char grade) {
Console.WriteLine("성적 : "+grade); }
~AllFunc() {
// 메모리 해제를 위한 코드 작성
Console.WriteLine("메모리 해제");
}
}
class Program
{
static void Main(string[] args)
{
AllFunc func = new AllFunc();
func.writefunc("enchupin");
func.writefunc(20230828);
func.writefunc('A');
}
}
}
728x90
반응형
'C# > C# 문법' 카테고리의 다른 글
[C#] 인스턴스, 싱글턴 (0) | 2023.10.06 |
---|---|
[C#] 정적 필드 (0) | 2023.10.06 |
[C#] 오버로딩 (0) | 2023.10.06 |
[C#] 클래스 (0) | 2023.10.06 |
[C#] 가변 배열 (0) | 2023.10.06 |