C#(6)
-
[C#] is 패턴 매칭, is not 패턴 매칭 에 대해 알아보자
또 오랜만에 글 한편 쓴다 오늘은 간단하게 C# 7.0 부터 도입된 is not 패턴 매칭에 대해 알아보도록 하자 1. is not이 무엇인가? 자, 시작은 이렇다. 우리가 코딩하다 보면 객체의 타입 체크가 필요할 때가 많을거다. 특히 UI 작업하면서 많이 보게 될텐데 element가 TextBlock인지 아닌지 확인해야 한다고 치자. 옛날엔 그냥 if (element is TextBlock) 이렇게 썼겠지만, 이젠 element is not TextBlock textBlock이라고 쓸 수 있다. 이거 존나 편한게 이거 없던 시절엔 아래처럼 써야 된다. element는 임의의 변수고 TextBlock은 임의의 타입이다. var textBlock = element as TextBlock; if(textBl..
2023.11.18 -
[C#] 비동기 프로그래밍: Task.Run과 바로 호출의 차이점
오랜만에 글 한편 쓴다 오늘은 C# 비동기 프로그래밍의 핵심 개념 중 하나인 Task.Run의 사용과 그냥 메서드를 직접 호출하는 방법의 차이점에 대해 이야기해볼려고 하는데 이거 존나 중요하니까 잘 보도록 하자 public COMPortExplorerVM() { Task.Run(async () => await MonitorComportStatusChangesAsync()); B(); } public COMPortExplorerVM() { MonitorComportStatusChangesAsync(); B(); } 위 두 코드는 어떤 차이점이 있을까? 아참 MonitorComportStatusChangesAsync() 의 구현부는 아래와 같다고 가정하자. public async Task MonitorCom..
2023.10.24 -
[C#] 비동기 프로그래밍(APM)에 대해 알아보자
이 글을 읽기전에 필요한 기초 지식은 아래와 같으니 검색을 통해 먼저 숙달하고 본 포스팅을 읽도록 하자 블로킹 vs 논블로킹 함수 동기 vs 비동기 프로그래밍 이 글을 작성하는 시점에서 C#의 비동기 프로그래밍 기술은 크게 APM (Asynchronous Programming Model)과 EAP(Event-based Asynchronous Pattern) 그리고 마지막으로 TAP (Task-based Asynchronous Programming) 로 나눌 수 있다. 이 중 현재 시점에서 C#의 가장 진보된 비동기 프로그래밍 스킬하면 TAP 인데 이번 포스팅에서는 APM에 대해 우선 알아보도록 하자. APM은 .NET framework 1.0 시절부터 나온 닷넷의 비동기 프로그래밍 기술 중 원조격 기술인..
2023.03.21 -
[C#] 디버깅 시 데이터의 조사식 포맷을 변경해보자
DebuggerDisplay * 왜 필요함? 아래와 같이 냉장고를 추상화한 클래스가 있다. public class Refrigerator { /// /// 설정 온도 (도달해야 할 온도) /// public float SetPoint { get; } = 3.0f; /// /// 공급 온도 (설정 온도에 도달하기 위해 공급되는 바람의 온도) /// public float SupplyTemp { get; } = 2.0f; /// /// 순환 온도 (냉장고를 한 바퀴 순환하고 되돌아오는 바람의 온도) /// public float ReturnTemp { get; } = 3.2f; /// /// 냉장고 내부의 습도 /// public float Humid { get; } = 72.5f; public Refrig..
2022.12.30 -
[C#] 열거형 값을 문자열로 사용해보자
Description * 왜 필요함? 코드를 작성하다보면 열거형을 문자열처럼 사용하고 싶을 때가 있다. 예를들어 아래와 같은 열거형이 있다고 보자 public enum PLang { C, Cpp, CSharp, Go, Rust, AJ, } 그리고 이제 아래처럼 출력을 해보면 Console.WriteLine(PLang.Cpp); Console.WriteLine(PLang.CSharp); 문자열로 잘 나온다. 그럼 끝일까? 생각해보면 열거형 목록명은 특수문자나 띄워쓰기 같은게 불가하다. 예를 들어 C++, C# 이런 형태로 쓰는게 불가하다는 뜻 그런데 열거형으로 C++, C# 같은 특수문자가 나오게 하거나 띄워쓰기가 되게 하고 싶다 하면 구현 방법도, 사용방법도 상당히 불편해진다. 불편해지는만큼 코드 유지보..
2022.12.30 -
[C#] 외부함수를 멤버함수처럼 사용하기
확장 메서드 (Extension Methods) 개인적으로 아주 훌륭한 기능이라고 생각하는 확장 메서드... static 메서드로서 특정 클래스나 구조체 심지어 인터페이스까지 메서드를 확장가능하게 한다. 그리고 이렇게 확장된 메서드는 마치 멤버함수마냥 사용이 가능하다. 한번 아주 간단한 예제를 보도록 하자. 아래의 코드는 List 클래스를 확장한 AddRangeExceptNull 메서드 이다. public static class ListExtensionMethods { public static void AddRangeExceptNull(this List obj, IEnumerable collection) { if (collection == null) return; obj.AddRange(collectio..
2022.12.26