생성자와 소멸자에 대해 알아보도록 하겠습니다.
생성자(Constructor)
생성자는 말 그대로 객체가 생성 시에 호출되는 메소드(함수)입니다. 메소드와 다른 점은 반환 형식도 없고 값을 반환할수도 없다는 것입니다. 아래의 예제를 통해 알아보도록 하겠습니다.
위 예제에서 보시듯 생성자는 객체가 생성되며 호출이 됩니다. 더불어 반환 형식자체가 없다는 것도 알 수 있습니다. 예제에선 클래스 내에 생성자를 선언하였지만 명시적으로 생성자를 선언하지 않아도 기본적으로 생성자가 호출이 됩니다.
보통 생성자는 필드. 즉 멤버 변수들의 초기화에 활용됩니다.
생성자는 메소드처럼 오버로딩이 가능합니다. 예제를 통해 보겠습니다.
각각의 생성자로 객체가 생성이 되고 있습니다. 예제에서 보듯 생성자는 메소드처럼 오버로딩이 가능합니다. 필요에 따라 생성자를 추가하여 활용하시면 됩니다^^
소멸자(Deconstructor)
소멸자는 생성자와 반대로 객체가 소멸 시에 호출되는 메소드(함수)입니다.
소멸자가 호출이 되어 출력이 된 걸 볼 수가 있습니다. 메인 함수에서 클래스가 생성이 되어 함수를 빠져나간 뒤 가비지 콜렉터에 의해 객체가 삭제될 때 소멸자가 호출이 됩니다. 이 가비지 콜렉터는 c#에서의 메모리 관리를 자동으로 해주는 녀석입니다. 객체가 더 이상 사용이 되고 있지않다고 판단되면 가비지 콜렉터가 수거하여 객체를 삭제합니다. 덕분에 객체를 메모리에서 삭제하지 않아 발생하는 문제들이 일어나지 않습니다. 다만 객체의 삭제 시점을 프로그래머가 정할 수 없고 가비지 콜렉팅에 따른 처리를 해야함으로 속도가 조금 느립니다.
이 가비지 콜렉터 때문에 소멸자를 쓰는 의미가 퇴색됩니다. 보통 소멸자를 호출하며 객체를 메모리에서 제거를 하는데 c#은 그럴 필요가 없습니다. 더불어 삭제 시점도 정할 수 없으니 소멸자를 굳이 쓸 필요가 없습니다.
마지막으로 생성자와 소멸자를 함께 호출해 보았습니다. 소멸자는 가비지 콜렉터가 수거할 수 없는 자원이라면 그런 상황에서만 활용하면 됩니다. 굳이 사용하려고 한다면 퍼포먼스만 떨어지겠죠.
'프로그래밍 > c#' 카테고리의 다른 글
c#_34 Sealed 클래스 (0) | 2021.07.25 |
---|---|
c#_33 클래스 상속(Class inheritance) (0) | 2021.07.20 |
c#_31 접근 제한자, 접근 한정자 private, public, protected (0) | 2021.07.12 |
c#_30 클래스 Class 1 (0) | 2021.07.08 |
c#_29 배열:Array2 다차원 배열 (0) | 2021.06.09 |
댓글