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();
}
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 사용
Author And Source
이 문제에 관하여(C#교과서 마스터하기 25. 소멸자 & 가비지 수집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@ansalstmd/C교과서-마스터하기-25.-소멸자-가비지-수집
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 소멸자 : 좋은 호텔 앞에서의 주차 요원 역할
- 왜? 키를 받고 알아서 시동을 꺼주니까
- 메모리 할당
- 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 사용
Author And Source
이 문제에 관하여(C#교과서 마스터하기 25. 소멸자 & 가비지 수집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@ansalstmd/C교과서-마스터하기-25.-소멸자-가비지-수집
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
private void MyMethod(...)
{
double y = ...;
int x = ...;
...
// x, y는 여기 시점에서 바로 소멸
}
- 메모리 단편화(memory fragmentation)의 원인이 될 수 있음
String s = ...;
MyClass c = ...;
private void MyMethod2(...)
{
String t = s;
MyClass d = c;
// 참조된 t와 d는 여기 시점에서 소멸
// s와 c는 Heap 메모리에 아직 존재
}
- 소멸자 실행시점을 확인하기 위해서는 Core가 아닌 Framework기반으로 생성한다
- F11 사용
Author And Source
이 문제에 관하여(C#교과서 마스터하기 25. 소멸자 & 가비지 수집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ansalstmd/C교과서-마스터하기-25.-소멸자-가비지-수집저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)