
메모리에 저장할 장소를 확보하는 행위를 의미한다.유사한 사례로는, Kotlin/JVM의 use,AutoCloseable,Closeable,close가 있다.
IDisposable
- IDisposable은 .Net에 정의된 표준 인터페이스중 하나이다.
관리되지 않는 리소스를 해제하는 메커니즘을 제공합니다.라고 설명되어있는데, 이는 GC에 의해서 자동으로 정리되지 않는 리소스를 해제하여 Freezing현상을 막고, 제때제때 정리하는 변수임을 나타낸다.
void public Dispose()를 구현할 것을 요구하고 있다.Dispose()를 호출해 메모리를 해제하겠다는 일련의 약속으로, 특수한 메모리 해제를 요구하는 경우 이 함수를 호출해 메모리를 해제한다.using구문은 두 가지 사용처가 있다.open = C# using = importusing |static| <name_space>
using System
축약이 가능해진다는 장점이 있다.use = C# using = use {} - RAIIusing(var s = ...) {}
using System;
public class Program
{
public class KindOfClass{
// Heap할당이 일어나는 Class, 전역변수이므로 GC가 아닌 이상 사라지지 않는다.
// 그런데. event가 덕지덕지 붙어있다고 가정하자.
public event Action publishingDo;
public void doing(){
publishingDo?.Invoke();
}
}
public class Somting : IDisposable { // 해제가능한 Class이다.
KindOfClass kind = null;
Action vas;
public Somting(KindOfClass kd){
kind = kd;
this.vas = new Action(()=>{Console.WriteLine("HI!");});
kd.publishingDo += this.vas;
}
public void Dispose(){
if(kind != null) {
kind.publishingDo -= vas;
}
}
}
public static void Main()
{
var evch = new KindOfClass();
using(var s = new Somting(evch)){
evch.doing();
}
Console.WriteLine("Disposed!");
evch.doing();
}
}
unsafe이때부터는 메모리관리를 깊게 나가는 부분이다.
OOP가 아니라 C를 먼저 해보고 보는걸 권장한다.
stackalloc