소멸자 & 생성자

정제로·2023년 8월 15일
0

C#

목록 보기
17/30

소멸자 & 생성자

소멸자는 생성자와 연관된 내용이다.

생성자

class Person //클래스를
{
    private string name;
    private int age;

    // 매개변수가 없는 디폴트 생성자, 생성
    public Person()
    {
        name = "Unknown";
        age = 0;
    }

    // 매개변수를 받는 생성자, 오버로딩 생성
    public Person(string newName, int newAge)
    {
        name = newName;
        age = newAge;
    }

    public void PrintInfo()
    {
        Console.WriteLine($"Name: {name}, Age: {age}");
    }
}

class Main
{
	static void Main (string[] args)
    {
    	Person person1 = new Person();
		Person person2 = new Person("John", 25); 
    }
}
  1. 생성자 이름은 클래스 이름과 동일합니다.
  2. 생성자는 값을 반환하지 않으므로 반환 유형과 return문이 존재하지 않습니다.
  3. 생성자를 정의하지 않으면 클래스에서 기본 생성자라고 하는 암시적 생성자를 제공합니다.

언제든 오버로딩이 가능하고, 매개변수도 존재할 수 있으며 사용자가 직접 특정 로직을 사용하여 생성자를 만들 수도 있다!

이후 객체를 호출할때(new), 이 생성자를 이용해 호출된다!

소멸자

'~'를 클래스의 이름 앞에 붙힌다

namespace asd
{
    class Person
    {
        private string name;

        public Person(string name)
        {
            this.name = name;
            Console.WriteLine(name + "객체 생성!");
        }

        ~Person()
        {
            Console.WriteLine(name + "객체 소멸!");
        }
    }

    class BJ
    {
        static void Main(string[] args)
        {
            Person person1 = new Person("A");
            Person person2 = new Person("B");
            Person person3 = new Person("C");
        }
    }
}

//출력
A갹채 생성!
B갹채 생성!
C갹채 생성!
C객체 소멸!
B객체 소멸!
A객체 소멸!

이처럼 객체를 만들어 지게 한 귀 소멸하는것을 확인할 수 있다!
근데 소멸하는 순서를 보면, ABC순서가 아닌 CBA순서로 소멸된다

이건 GC(가비지콜렉터)가 언제 어떤순서로 소멸시킬지 모르기에, 실행할때마다 소멸되는 순서는 바뀔수 있다!

참고로
GC.Collect()
를 사용하여 소멸자 호출순서를 확인간으!

using System.Xml.Linq;

namespace asd
{
    class Person
    {
        ~Person()
        {
            Console.WriteLine("부모 클래스 소멸자 호출!");
        }
    }

    class  Minsu : Person
    {
        ~Minsu()
        {
            Console.WriteLine("자식 클래스 소멸자 호출!");
        }
    }

    class BJ
    {
        static void sample()
        {
            Minsu minsu = new Minsu();
        }
        static void Main(string[] args)
        {
            sample();
            GC.Collect();
            Console.ReadLine();
        }
    }
}

//출력
자식 클래스 소멸자 호출!
부모 클래스 소멸자 호출!

자식 소멸자 호출 후 부모가 호출됨


profile
초보자입니다.. 잘못된 정보, 달게 받겠습니다..

0개의 댓글

관련 채용 정보