객체를 생성하고, 소멸시키는데 사용되는 기능
생성자는 객체가 생성될 때 호출되며 초기화 작업을 수행한다.
반면에 소멸자는 객체가 메모리에서 해제될 때 호출 되어 자원을 정리한다.
기본 생성자
using UnityEngine;
public class Player
{
private string name;
private int hp;
public Player()
{
name = "박현민";
hp = 100;
}
}
사용자 정의 생성자
using UnityEngine;
public class Player
{
private string name;
private int hp;
public Player(string name, int hp)
{
name = this.name;
hp = this.hp;
}
}
생성자 메소드 오버로딩
using UnityEngine;
public class Player
{
private string name;
private int hp;
public Player()
{
name = "박현민";
hp = 100;
}
public Player(string name, int hp)
{
this.name = name;
this.hp = hp;
}
public void PrintInfo()
{
Debug.Log($"Name: {name}, Hp: {hp}")
}
}
using UnityEngine;
public class GameManager : MonoBehaviour
{
private Player player1;
private Player player2;
private void Start()
{
player1 = new Player();
player2 = new Player("권재헌", 150);
player1.PrintInfo();
player2.PrintInfo();
}
}
// 출력
// Name: 박현민, HP: 100
// Name: 권재헌, HP: 150
using UnityEngine;
public class Player
{
private string name;
private int hp;
~Player()
{
// 자원 해제 작업 수행!
}
}
하지만 소멸자는 자주 사용되지 않는다. C#에서는 GC가 대부분의 자원을 자동으로 관리하기 때문에 자원을 직접 해제하는 소멸자는 일반적으로 불필요하다.
게다가, 소멸자가 있는 객체는 GC가 발견하더라도 즉시 제거되지 않고 Finalization Queue라는 대기열에 추가한다. 이 대기열의 객체들은 Finalizer 스레드가 처리한다.
소멸자가 실행된 후에도 객체는 메모리에 남아있어 다음 GC 사이클에서 제거된다.
결과적으로 소멸자가 있는 객체는 최소 두 번의 GC 사이클이 필요하므로 성능 저하를 초래할 수 있다.