📘프로그래밍/C#

[C#] 09 생성자 / 소멸자

bohemdev1 2024. 10. 31. 03:34

정의

 

생성자(Constructor) 란?

객체의 생성과 동시에 자동으로 한 번 호출되는 메소드

 

소멸자(Destructor) 란?

객체의 메모리가 소멸될 때 자동으로 한 번 호출되는 메소드

 

 

 

기능

 

 

생성자

 

생성자의 선언 방법은 다음과 같습니다.

클래스명 () { ··· }
클래스명 ( 매개변수1, 매개변수2, ··· ) { ··· }

 

 

주요 특징은 다음과 같습니다.

  • 생성자의 이름은 반드시 해당 클래스명과 일치해야 합니다. 
  • 오버로딩이 가능합니다. 매개변수가 없는 형식은 기본 생성자 입니다.
  • 주로 클래스 객체 생성함과 동시에 멤버 변수들을 초기화 하려는 목적으로 사용됩니다. 

 

다음은 생성자를 이용한 클래스 객체 생성 예시입니다.

 

#1 Monster 클래스 선언

/* #1 몬스터의 기본 정보를 나타내는 Monster 클래스 */
public class Monster
{
    public string m_Name;
    public int m_Hp;
    public float m_Power;

    public void PrintInfo()
    {
        Debug.Log($"몬스터명({m_Name}) : 체력({m_Hp}) 힘({m_Power})");
    }

    /* 기본 생성자 */
    public Monster()
    {
        m_Name = "더미";
        m_Hp = 0;
        m_Power = 0.0f;
    }

    /* 매개변수를 받는 생성자 */
    public Monster(string name, int hp, float power)
    {
        m_Name = name;
        m_Hp = hp;
        m_Power = power;
    }
}

 

#2 Monster 클래스 객체 생성

/* #2 Monster 클래스 객체 A B 생성 */
void Start()
{
    Monster A = new Monster();
    Monster B = new Monster("바람 드래곤", 2000, 7.5f);

    A.PrintInfo();
    B.PrintInfo();
}

/*
몬스터명(더미) : 체력(0) 힘(0)
몬스터명(바람 드래곤) : 체력(2000) 힘(7.5)
*/

 

 

 

소멸자

 

소멸자의 선언 방법은 다음과 같습니다.

~클래스명 () { ··· }

 

 

주요 특징은 다음과 같습니다.

  • 소멸자의 이름은 반드시 해당 클래스명과 일치해야 합니다.
  • 소멸자는 매개변수를 가지지 않습니다.
  • 오버로딩이 불가합니다.
  • 주로 더 이상 사용하지 않는 객체의 메모리를 회수하는 목적으로 사용합니다.

 

유니티의 경우 자동으로 사용하지 않는 객체에 할당된 메모리를 회수하는 Garbage Collection 이 존재하므로 보통의 경우 소멸자 선언 및 호출을 생략합니다.