C#교과서 마스터하기 25. 소멸자 & 가비지 수집

https://www.youtube.com/watch?v=Ls88lTcYVkU&list=PLO56HZSjrPTB4NxAsEP8HRk6YKBDLbp7m&index=59

1. 소멸자(Destuctor)

  • 생성자와 반대 개념으로 클래스로부터 인스턴스화된 개체가 메모리 상에서 없어질 때 발생하는 메서드
  • C#에서는 .NET Framework의 GC(Garbage Collector)가 개체 소멸시 메모리 해제 등의 역할을 대신해 주기 때문에 소멸자를 직접 접근할 일은 없다
  • 자동차 시동 끄는 기능으로 비유가 가능하며 운전수가 주차하고 시동 끄는 행위를 진행하는 게 아닌 주차요원(GC)이 이 모든 것을 대신해주는 것과 같은 의미

01. using 구문을 사용한 개체 소멸시기 결정

  • 형식
using (Class className = new Class())
{
	className.Method();
}

  • 블록의 끝에서 자동으로 선언된 개체 해제

2. 가비지 수집기(Garbage Collector)

  • 자동차(Car) 개체와 관련하여
    • 소멸자 : 좋은 호텔 앞에서의 주차 요원 역할
      • 왜? 키를 받고 알아서 시동을 꺼주니까
  • 개체의 라이프 사이클(The Object Life Cycle)
  • 값형과 참조형의 할당된 자원 관리 비교

3. 개체의 라이프 사이클(Object Life Cycle)

  • 메모리 할당
    • new 키워드
  • 개체 초기화
    • 생성자(Constructor)에 의한 개체 생성/초기화
  • 개체 사용
    • 속성, 메서드 및 기타 멤버 사용
  • 개체 소멸
    • 소멸자에 의한 개체 정리
  • 메모리 반환

4. 값형과 참조형 메모리 자원 관리 비교

01. 값형(Value Type)

  • Stack(LIFO)에 저장 됨
  • 해당 범위(Scope)를 벗어나면 자동으로 소멸 됨
  • 메모리 단편화(memory fragmentation)가 없음
private void MyMethod(...)
{
	double y = ...;
    int x = ...;
    ...
    
    //  x, y는 여기 시점에서 바로 소멸
}

02. 참조형(Reference Type)

  • Heap(FIFO)에 저장 됨
  • 동일 개체를 여러 번 참조 가능
  • 하나라도 참조하고 있으면 소멸되지 않음
    • 메모리 단편화(memory fragmentation)의 원인이 될 수 있음
  • 가비지 컬렉터(Garbage Collector)에 의해 관리
String s = ...;
MyClass c = ...;
private void MyMethod2(...)
{
	String t = s;
	MyClass d = c;
    
    //  참조된 t와 d는 여기 시점에서 소멸
    // s와 c는 Heap 메모리에 아직 존재
}

5. 프로젝트

  • 소멸자 실행시점을 확인하기 위해서는 Core가 아닌 Framework기반으로 생성한다
  • F11 사용

좋은 웹페이지 즐겨찾기