반응형

C# 49

[C#] 디자인패턴 - Factory Method Pattern

Factory Method Pattern은 객체를 생성하는 디자인 패턴 중 하나로, 객체 생성 로직을 하위 클래스로 위임함으로써 인스턴스화를 수행하는 클래스와 실제 생성되는 객체 클래스를 분리합니다. 이 패턴은 객체 생성에 관한 로직을 캡슐화하고, 새로운 타입의 객체 추가 시 코드의 변경을 최소화하는 데 도움을 줍니다. 기본 구조 Factory Method Pattern은 주로 다음의 두 가지 구성 요소로 이루어져 있습니다 Creator: 객체를 생성하는 공통 인터페이스 또는 추상 클래스입니다. ConcreteCreator: 실제 객체를 생성하는 클래스입니다. 언제 사용해야 하는가? 객체 생성과 클래스 구현을 분리하고 싶을 때 시스템에 새로운 객체 타입을 추가할 때 코드 변경을 최소화하고 싶을 때 초기화..

프로그래밍/C# 2023.08.15

[C#] 디자인패턴 - Strategy Pattern

Strategy Pattern은 디자인 패턴 중 하나로, 알고리즘의 구현을 캡슐화하여 그것들을 상호 교체할 수 있도록 만든다. 이 패턴은 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있도록 해줍니다. 기본 구조 Strategy Pattern은 다음과 같은 세 가지 주요 구성 요소로 이루어져 있습니다: Strategy: 이것은 모든 알고리즘(전략)의 공통 인터페이스입니다. ConcreteStrategy: Strategy 인터페이스를 구현한 실제 알고리즘 클래스입니다. Context: Strategy 객체를 사용하는 역할을 합니다. 이는 클라이언트에 의해 설정될 수 있습니다. 언제 사용해야 하는가? 동일한 문제에 대해 여러 가지 해결 방법이 있는 경우 알고리즘이 클래스의 정의와 독립적으로..

프로그래밍/C# 2023.08.15

[WPF] Slider 드래그 완료 시점에 값 업데이트하기

안녕하세요, 오늘은 WPF에서 Slider의 Value를 사용자가 드래그를 완료한 순간에만 업데이트하는 방법에 대해 이야기하려 합니다. 일반적으로 WPF에서는 사용자가 Slider를 드래그하는 동안 실시간으로 값을 업데이트하지만, 이 방법을 사용하면 드래그가 완료된 후에만 업데이트가 이루어집니다. 먼저, 어떤 문제를 해결하려는가? Slider를 사용하면 사용자는 원하는 값을 직접 조절할 수 있습니다. 이때 Slider의 Value를 어떤 속성에 바인딩하면, 사용자가 슬라이더를 드래그하면서 속성 값이 실시간으로 업데이트됩니다. 이런 실시간 업데이트가 문제가 될 수 있습니다. 왜냐하면 슬라이더를 움직이는 동안에도 바인딩된 속성의 값이 계속 변경되면서 원치 않는 연산이나 UI 업데이트가 발생할 수 있기 때문입..

프로그래밍/WPF 2023.07.26

[C#] LINQ 쿼리 구문 연산자와 사용법

안녕하세요, 오늘은 C#의 LINQ(Language Integrated Query) 쿼리 구문 연산자에 대해 알아보려고 합니다. LINQ는 데이터를 조회하고 조작하는 강력한 기능을 제공하는 C#의 주요 기능 중 하나입니다. LINQ 쿼리 구문은 SQL과 유사한 구조를 가지며, 다음과 같은 주요 연산자를 사용합니다: 1. from 연산자 from 연산자는 데이터 소스와 범위 변수를 지정합니다. 쿼리 구문에서는 항상 첫 번째 절로 사용되어야 합니다. List numbers = new List { 1, 2, 3, 4, 5 }; var query = from num in numbers select num; 2. where 연산자 where 연산자는 필터링 조건을 지정합니다. where 절에 지정된 조건을 만족하..

프로그래밍/C# 2023.06.09

[C#] LINQ의 종류와 예제

안녕하세요, 오늘은 C#에서 사용되는 LINQ(Language Integrated Query)에 대해 알아보려고 합니다. LINQ는 데이터를 조회하고 조작하는 강력한 기능을 제공하는 C#의 주요 기능 중 하나입니다. LINQ는 다양한 종류가 있으며, 이 글에서는 그 중 몇 가지를 살펴보고 각각에 대한 예제를 제공하겠습니다. 1. LINQ to Objects LINQ to Objects는 메모리에 있는 데이터에 대해 쿼리를 수행합니다. 이는 배열이나 리스트와 같은 컬렉션에 대해 사용됩니다. List numbers = new List { 1, 2, 3, 4, 5 }; var evenNumbers = from num in numbers where num % 2 == 0 select num; 위의 예제에서는 n..

프로그래밍/C# 2023.06.09

[WPF] DataGrid DataGridTemplateColumn 사용시 Ctrl+C (복사하기) 기능

안녕하세요, 오늘은 WPF의 DataGrid에서 DataGridTemplateColumn을 사용하면서 Ctrl+C로 셀의 내용을 복사하는 방법에 대해 이야기하려고 합니다. 복사하는 기능은 기본적으로 제공되지만, DataGridTemplateColumn을 사용하면 기본 설정이 작동하지 않을 수 있습니다. 이럴 때에는 ClipboardContentBinding 속성을 사용하면 해결할 수 있습니다. ClipboardContentBinding 속성이란? WPF의 DataGrid 컨트롤에서는 ClipboardContentBinding이라는 속성을 통해 셀의 내용이 클립보드에 어떻게 복사되는지 제어할 수 있습니다. 기본적으로 각 DataGridColumn에는 이 속성이 있으며, 해당 열의 셀이 클립보드에 복사될 때..

프로그래밍/WPF 2023.05.22

[C#] MessagePack-CSharp을 이용한 고성능 객체 직렬화 및 역직렬화

C#에서 객체를 직렬화 및 역직렬화하는 여러 가지 방법 중, 성능과 효율성 측면에서 뛰어난 MessagePack-CSharp에 대해 알아보겠습니다. MessagePack는 이진 형식을 사용하여 JSON보다 더 작은 크기와 더 빠른 처리 속도를 제공합니다. MessagePack-CSharp 라이브러리 설치 먼저, 프로젝트에 MessagePack-CSharp 라이브러리를 설치해야 합니다. NuGet 패키지 관리자를 사용하여 설치할 수 있습니다. 직렬화 및 역직렬화를 위한 클래스 준비 MessagePack를 사용하여 직렬화 및 역직렬화할 클래스에 [MessagePackObject] 특성을 추가하고, 모든 필드 또는 속성에 [Key] 특성을 지정합니다. using MessagePack; [MessagePackO..

프로그래밍/C# 2023.04.14

[WPF] 여러 Enum 상태에 따라 선택적으로 UserControl 표시하기

WPF에서 사용자 인터페이스를 개발하다 보면, 여러 상황에 따라 다양한 UserControl을 동적으로 표시해야 할 때가 있습니다. 이런 경우, Enum 상태에 따라 UserControl을 선택적으로 표시하는 방법을 사용할 수 있습니다. 이 이번 포스팅에서는 DataTemplate 및 DataTemplateSelector를 사용하여 여러 Enum 상태에 따라 UserControl을 표시하는 방법을 알아봅니다. 1. Enum 정의 public enum Status { First, Second, Third } 2. 각 상태에 대한 UserControl 정의 예를 들어, FirstControl.xaml, SecondControl.xaml, ThirdControl.xaml 파일을 각각 생성하여 다음과 같이 각 ..

프로그래밍/WPF 2023.04.12

[오류해결] Brush - DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다.

WPF에서 Json으로 직렬화와 역직렬화하여 화면에 디스플레이 하다가 UI Thread에선 문제가 없었는데, Task를 태워서 비동기 처리를 하려다 보니 아래와 같은 오류가 발생되었다. DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다. 처음엔 이게 뭐야??? 하면서 내가 사용한 객체들에 대해 뒤져보게 되었다. 일단 DependencyObject가 같은 Thread에서 나와야 한다는것이 일단 Dispatcher를 이용하면 될것이라는 것은 명확했다. 하지만 어느 부분에서?? 라는 것이 문제였다. 워낙 많은 양의 데이터를 역직렬화하다보니 전체를 감싸기도 애매했다. 그래서 객체에 담긴 모든 데이터를 다 확인해보기 시작했다. 뭐 결론은 Brush다. https://..

프로그래밍/WPF 2022.12.21

[C#] Class & Struct Performance Test

c#에서 사람들은 너무 무자비하게 Class만 사용한다. 하지만 실제 성능은 어떨까? stack과 heap의 차이라 너무 명백한 성능을 차이를 보이지만 똥인지 된장인지 찍어먹어봐야 아는 사람들이 있으니 이것을 보고 주니어를 졸업하도록 하자. https://mdfarragher.medium.com/whats-faster-in-c-a-struct-or-a-class-99e4761a7b76 What Is Faster In C#: A Struct Or A Class? What do you think is faster: filling an array with one million structs, or filling an array with one million classes? mdfarragher.medium.c..

프로그래밍/C# 2022.12.13
반응형