공부/Unity

[C#] 생성자, 파괴자

굴러다니다니 2025. 5. 22. 17:28

생성자, 파괴자

클래스의 이름과 같은 함수를 만든다면, 생성자가 된다

생성자는 객체가 생성될 때 호출되며 매개변수 즉 parameter가 있는 생성자도 만들 수 있다

~클래스의 이름 함수는 파괴자이며, 객체가 파괴될 때 호출된다

객체를 사용하는 곳이 없으면 가비지 컬렉터에 의해 자동으로 호출된다

*프로그래머가 메모리를 정리하기엔 복잡하기에 가비지 컬렉터가 안쓰는 메모리를 자동으로 정리해줌

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Practice4 : MonoBehaviour
{
    class 동물
    {
        int 나이;
        public 동물()
        {
            print("동물 디폴트 생성자");
        }
        public 동물(int a)
        {
            나이 = a;
            print($"동물 파라미터 생성자{나이}");
        }
        ~동물()
        {
            print("동물 파괴자");
        }
    }

    class 포유류: 동물
    {
        public 포유류()
        {
            print("포유류 디폴트 생성자");
        }
        public 포유류(int a): base(a)
        {
            print($"포유류 파라미터 생성자 {a}");
        }
        ~포유류()
        {
            print("포유류 파괴자");
        }
    }

    class 고양이: 포유류
    {
        public 고양이()
        {
            print("고양이 디폴트 생성자");
        }
        public 고양이(int a) : base(a)
        {
            print($"고양이 파라미터 생성자 {a}");
        }
        ~고양이()
        {
            print("고양이 파괴자");
        }
    }
    class 개 : 포유류
    {
        public 개()
        {
            print("개 디폴트 생성자");
        }
        public 개(int a) : base(a)
        {
            print($"개 파라미터 생성자 {a}");
        }
        ~개()
        {
            print("개 파괴자");
        }
    }

    void Start()
    {
        동물 c = new 고양이();
        동물 d = new 개(13);
    }
}

위와 같이 코드를 쓰고 실행한다면 어떤 결과가 나올까

 

동물 -> 포유류 -> 고양이 순서로 부모 클래스부터 생성자가 호출되며, 파라미터를 넣은 쪽도 마찬가지로 부모 클래스 -> 자식 클래스 순서로 생성자를 만들었다.

매개변수가 있는 생성자는 같은 클래스의 매개변수가 없는 생성자를 호출하지 않는다.

 

파괴자의 호출 순서는 왼쪽의 역순으로 진행됨을 확인할 수 있다

728x90
반응형