C# - struct vs class, struct를 잘 활용하기

C# - struct vs class

January 15, 2024 · 4 min · 730 words · penspanic

C# 9.0 신기능 프리뷰

C# 9.0 써보기전 주관적 프리뷰 이번에 릴리즈된 C# 9.0의 기능을 살펴봤다. MS Docs 링크에 워낙 잘 설명돼있어서 기능에 대한 설명 자체는 자세히 다루지 않겠다. record type 새로운 Reference Type이 추가되었다. 몰랐는데, class 만 reference type 인줄 알았는데 익명 타입도 reference type에 포함된다고 한다. 어차피 C# 컴파일러가 익명 타입을 class로 변환할 것 같지만.. 역시 그렇다. 내부적으론 Tuple<,> 등과 비슷하게 구현됐다고 보면 될 것 같음. 내가 생각하는 도입 사유 기존의 class(reference type)으로 immutable type을 구현하기 좀 까다로웠다....

December 7, 2020 · 4 min · 661 words · penspanic

C# lock의 내부 구현

C# 프로그래밍을 하다보면 자연스레 멀티쓰레딩 환경에서 자원 획득 제한이 필요한 경우 lock을 사용했었다. 이 lock 키워드 및 블럭을 사용했을 때 내부적으로 어떻게 동작되는지 궁금해서 알아보았다. lock 문 lock statement(lock 문) Microsoft Docs lock은 공식 문서에 문이라고 한다. Language Reference Statement Keywords lock Statement 위와 같은 구조로 Document에 구성되어 있다. 이 것의 동작 방식을 까보려면 역시 Decompile. private void DoAdd(int value) { lock (_collection) { _collection.Add(value); } } 위 코드를 Decompile시 아래의 il로 해석된다....

October 10, 2020 · 2 min · 424 words · penspanic

C# Unmanaged Memory

Managed Memory CLR(Common Language Runtime)이 관리하는 메모리. Garbage Collection의 대상이 된다. Unmanaged Memory Managed Memory가 아닌 것. C# 에서도 C++ 에서처럼 직접 메모리를 할당 할 수 있다. IntPtr memory = Marshal.AllocHGlobal(100); for (int i = 0; i < 100; ++i) { ((byte*) memory)[i] = (byte)(i + 1); } Marshal.FreeHGlobal(memory); stackalloc 표현식 Stack 에 메모리가 할당됨. 그 Stack을 벗어날 때 자동으로 메모리 해제. 일시적인 계산을 위한 메모리를 사용할 때, stackalloc을 사용함으로써 Managed Heap에 할당되지 않게 하여 최적화 가능....

September 28, 2020 · 1 min · 179 words · penspanic

C# - Reflection에 대한 고찰

C# 프로그래밍 씬에서 가장 흔한 오해중 하나는 “Reflection은 느리니까 자제해야 한다.” 라는 것. 처음엔 그냥 그런가보다 했다. C#에 대한 이해도가 많이 부족했으니. 하지만 필요에 의해 Reflection을 사용하게 됐고, 그것 없이 C# 프로그래밍을 하기에 불편함에 이르렀다. 제대로 이해하고 적절히 사용해야 할 때가 온 것이다. 깊게 파보고, 프로파일링 - 최적화 해보고. 그 과정들을 통해 지금은 올바른 Reflection 사용은 현대적이고 발전된 코드를 작성할 수 있다. 라고 생각하게 됐다. 느리다는 것 처리 시간이 오래 걸린다....

September 25, 2020 · 3 min · 587 words · penspanic