[기초] - C# 생성자와 소멸자
생성자는 객체가 인스턴스화될 때 호출되어 초기화 작업을 수행하고,
소멸자는 객체가 메모리에서 해제될 때 호출되어 정리 작업을 수행한다.
생성자 (Constructor)
생성자는 클래스의 인스턴스가 생성될 때 호출되는 특수한 메서드!
생성자 예제 코드
아래와같이 생성자를 생성하고
호출을 해주면
결과
소멸자 (Destructor)
소멸자(종료자)는 객체가 없어질 때 정의하는 메소드이다.
소멸자의 이름은 클래스 이름 앞에 ~를 붙여서 정의하고 반환형과 매개변수가 없다.
소멸자는 오버로딩 할 수 없으며 직접 호출할 수 없다.
🔴 주의 사항 🔴
1. C#에서는 명시적인 소멸자를 사용하는 것이 일반적으로 권장되지 않는다.
2. C#의 가비지 컬렉터가 메모리 관리를 담당하므로 보통 개발자가 직접 소멸자를 정의할 필요는 없다.
3. 소멸자는 가급적이면 사용하지 않는 것을 추천한다. 그 이유는 CLR의 가비지 컬렉터가 언제 호출되는지 알 수 없기 때문이다.
4. C#에서는 메모리 관리는 가비지 컬렉터가 알아서 하기 때문에 소멸자에서 직접 구현하는 것보다는 카비지 컬렉터가 처리하는 편이 좋다.
소멸자의 예제 코드
1. 일반적인 C#에서는 소멸자는 ~ClassName() 형식으로 정의되며, 해당 클래스의 인스턴스가 가비지 컬렉터에 의해 수거될 때 호출된다.

결과
2. 유니티에서는 MonoBehaviour를 상속하는 스크립트 클래스에서는 C#의 일반적인 소멸자가 아닌 OnDestroy() 메서드를 사용한다. 이는 유니티 게임 오브젝트의 수명 주기와 관련이 있다.
사용 시기
- 리소스 해제: 게임 오브젝트가 파괴될 때 필요한 리소스를 해제한다. 예를 들어, 할당된 메모리 해제, 열린 파일 또는 네트워크 연결 종료 등을 수행할 수 있다.
- 후처리 작업: 게임 오브젝트 파괴 전에 마무리할 작업을 수행한다. 예를 들어, 다른 오브젝트에게 파괴되는 오브젝트에 대한 참조를 제거하거나 상태를 업데이트할 수 있다.
OnDestroy() 메서드는 해당 게임 오브젝트가 파괴되기 직전에 호출된다.
요약하면, 유니티에서는 생성자를 사용하여 객체의 초기화를 수행하고,
OnDestroy 메서드를 사용하여 객체의 소멸 시 필요한 정리 작업을 수행하는 것이 일반적인 방식이다.
명시적인 소멸자를 정의하는 경우는 드물며,
일반적으로는 OnDestroy 메서드를 활용하여 객체의 파괴에 대응한다.