c#에서 db, 네트워크, 파일, stream, 그래픽 리소스 등의 개체를 생성하면


명시적으로 Dispose가 필요한데 이걸 깜빡할 수도 있으니


보통 using (var a = new A()) 

{

 //... 

} // 블럭 끝에서 알아서 Dispose (자동으로 try, finally로 분리함)


이렇게 쓰는데 이게 객체를 여러가지 생성하거나, 중첩해서 쓰거나, 코드가 길어지면 좆나 보기만해도 복잡해짐


그래서 결국 수동으로 Dispose를 호출해주게 되는데


이게 또 문제가 중간에 다른 문제로 예외 발생되거나 에러날 때 적절히 처리 안해주면 리소스 반환 바로 안되는 문제 발생


그래서 직접 try catch finally로 다 명시해주려면 귀찮거나 실수할 수 있음


c# 8.0에서는 using declaration 문법이 추가되어서


using var a = new A()


이걸로 끝임


using 선언한 영역 끝나면 알아서 Dispose 


좆나 편하기도 하지만 분기나 예외처리 블럭이 확 줄어들어서 보기에 너무 깔끔해짐


근데 이게 8.0만 되니까


c# 8.0 부터는 또 .net core, .net standard 최신 버전에서만 지원하고


.net framework에서는 c# 7.3까지만 공식 지원해서 못씀


.csproj 파일을 수정해서 강제적으로 몇가지 제외한 나머지 대부분의 8.0 기능을 쓸 수는 있지만 공식 지원이 아님.


그래서 앞으론 .net core 3.1 이상 버전의 프로젝트를 생성하지 않고


이번 기회에 ms 솔루션 다 버리고 파이썬이나 자바로 갈아탈까 고민 중