본문 바로가기
프로그래밍/c#

c#_32 클래스 Class 생성자, 소멸자

by 지나팩 2021. 7. 19.

생성자와 소멸자에 대해 알아보도록 하겠습니다. 

 

생성자(Constructor)

생성자는 말 그대로 객체가 생성 시에 호출되는 메소드(함수)입니다. 메소드와 다른 점은 반환 형식도 없고 값을 반환할수도 없다는 것입니다. 아래의 예제를 통해 알아보도록 하겠습니다.

생성자 선언 방법

위 예제에서 보시듯 생성자는 객체가 생성되며 호출이 됩니다. 더불어 반환 형식자체가 없다는 것도 알 수 있습니다. 예제에선 클래스 내에 생성자를 선언하였지만 명시적으로 생성자를 선언하지 않아도 기본적으로 생성자가 호출이 됩니다.

 

보통 생성자는 필드. 즉 멤버 변수들의 초기화에 활용됩니다. 

 

생성자는 메소드처럼 오버로딩이 가능합니다. 예제를 통해 보겠습니다.

각각의 생성자로 객체가 생성이 되고 있습니다. 예제에서 보듯 생성자는 메소드처럼 오버로딩이 가능합니다. 필요에 따라 생성자를 추가하여 활용하시면 됩니다^^

 

 

소멸자(Deconstructor)

소멸자는 생성자와 반대로 객체가 소멸 시에 호출되는 메소드(함수)입니다.

소멸자 선언 방법

소멸자가 호출이 되어 출력이 된 걸 볼 수가 있습니다. 메인 함수에서 클래스가 생성이 되어 함수를 빠져나간 뒤 가비지 콜렉터에 의해 객체가 삭제될 때 소멸자가 호출이 됩니다. 이 가비지 콜렉터는 c#에서의 메모리 관리를 자동으로 해주는 녀석입니다. 객체가 더 이상 사용이 되고 있지않다고 판단되면 가비지 콜렉터가 수거하여 객체를 삭제합니다. 덕분에 객체를 메모리에서 삭제하지 않아 발생하는 문제들이 일어나지 않습니다. 다만 객체의 삭제 시점을 프로그래머가 정할 수 없고 가비지 콜렉팅에 따른 처리를 해야함으로 속도가 조금 느립니다.

 

이 가비지 콜렉터 때문에 소멸자를 쓰는 의미가 퇴색됩니다. 보통 소멸자를 호출하며 객체를 메모리에서 제거를 하는데 c#은 그럴 필요가 없습니다. 더불어 삭제 시점도 정할 수 없으니 소멸자를 굳이 쓸 필요가 없습니다.

마지막으로 생성자와 소멸자를 함께 호출해 보았습니다. 소멸자는 가비지 콜렉터가 수거할 수 없는 자원이라면 그런 상황에서만 활용하면 됩니다. 굳이 사용하려고 한다면 퍼포먼스만 떨어지겠죠.

댓글