전체 글

· C#
회사에서 프로젝트를 진행하면서 계속해서 사용하는 것이 비동기 작업입니다. 코드로 비동기 작업을 구현하다 보면 꼬이는 경우가 간혹 발생하는데요 저는 이 문제를 해결하기 위해 많은 부분에 CancellationToken을 사용하여 해결합니다. 이번 포스팅은 CancellationToken에 대해 정리해보려 합니다. | CancellationToken 이해 - Cancellationtoken은 .NET에서 비동기 작업을 관리하는 데 사용되는 중요한 요소 중 하나입니다. Cancellationtoken를 작업이 취소되었을 때 작업을 정리하며 리소스를 해제하여 프로그램 관리에 더 도움을 주게 되며 주로 병렬 프로그래밍이나 비동기 프로그래밍에서 많이 사용합니다. | CancellationToken의 주요 개념 1...
이번 포스팅은 정렬 알고리즘 중 하나인 병합 정렬(Merge Sort)에 대한 내용을 정리하였습니다. 병합 정렬의 이해와 코드 예시, 퀵 정렬과의 차이점을 하나씩 알아보고 이해하였습니다. | 병합 정렬(Merge Sort) 이해 - 병합 정렬은 배열을 분할하고 분할된 부분 배열을 정렬한 다음 병합하여 배열을 정렬하는 재귀 정렬 알고리즘 중 하나입니다. - 언뜻 보면 퀵 정렬과 비슷해 보이지만 차이점이 있으므로 병합 정렬의 구동 방식부터 알아보겠습니다. | 병합 정렬의 구동 방식 1. 분할(Divide) : 주어진 배열을 반으로 나눔 2. 반복 : 배열의 크기가 1 이하가 될 때까지 분할 반복 3. 정복(Conquer) : 반으로 나뉜 배열을 정렬 4. 병합(Merge) : 정렬된 배열들을 병합하여 최종적..
이번 포스팅은 저번 포스팅의 버블 정렬에 이어 퀵 정렬에 대해 정리한 내용입니다. 퀵 정렬(Quick Sort)은 가장 널리 사용되는 정렬 알고리즘 중 하나이며, 이번 포스팅에서 퀵 정렬의 개념과 구동 방식, 그리고 파이썬으로 하는 구현 예제를 통해 퀵 정렬을 알아보겠습니다. | 퀵 정렬(Quick Sort) 이해 - 퀵 정렬은 분할 정복(Divide and Conquer) 알고리즘의 대표적인 예로 다음과 같은 단계로 나눌 수 있습니다. 1. 분할(Divide) : 리스트에서 하나의 요소를 선택, 이를 "피벗(Pivot)"이라 함 피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 옮김 2. 정복(Conquer) : 피벗을 기준으로 분할된 두 리스트에 대해 재귀적으로 정렬 함수 호출 각 부분 리스트에 ..
이번 포스팅은 버블 정렬에 대해 정리한 내용입니다. 자료구조와 알고리즘을 공부하게 되면서 초반에 배우게 되는 간단한 알고리즘인 버블정렬은 인접한 두 원소를 비교하고 필요한 경우에 위치를 교환하며 정렬을 수행하는 것입니다. 버블 정렬의 동작원리와 개념에 대해 자세히 알아보겠습니다. | 버블 정렬의 개념 - 버블 정렬은 이름 그대로 배열의 요소들을 반복적으로 비교하면서 큰 값이 "거품"처럼 위로 올라가며 배열을 정리하는 방식입니다. 이 과정은 배열의 길이만큼 반복되며, 한 번의 반복마다 가장 큰 값이 맨 오른쪽으로 이동합니다. | 버블 정렬의 동작 원리 - 버블 정렬의 동작 원리를 간단히 설명하면 다음과 같습니다 : 1. 리스트를 순회하면서 인접한 두 개의 요소를 비교 2. 첫 번째 요소가 두 번째 요소보다..
이번 포스팅은 파이썬을 공부하면서 알게 된 디스크립터(Descriptor)에 대해 정리하였습니다. 파이썬은 객체 지향 프로그래밍을 지원하는 언어로 객체의 속성(attribute)를 제어하는 다양한 방법을 제공합니다. 객체의 속성을 제어하는 다양한 방법 중 디스크립터(Descriptor)에 대해 알아보겠습니다. | 디스크립터(Descriptor) 개념 - Descriptor는 클래스의 속성을 더욱 잘 다룰 수 있게 해주는 파이썬의 클래스 제어 방법 중 하나입니다. - 객체의 속성(attribute)에서 추가 로직을 적용하거나 속성 값 변환, 유효성 검사 등을 수행할 때 유용하게 사용하며 일반적으로는 'property'나 데코레이터를 사용할 수 있지만 디스크립터는 재사용성이 높은 방법을 제공합니다. | 디스..
이번 포스팅은 제가 파이썬으로 작업하면서 비동기로 다중 스레드 작업을 할 수 있는 방법을 찾다가 알게 된 코루틴(coroutine)이라는 도구를 알게 되어 정리하였습니다. | 코루틴(coroutine) 개념 - 파이썬은 기본적으로 단일 스레드로 동작하는 언어입니다. 그런데 어떻게 하면 동시성 및 비동기 작업을 관리할 수 있을까요? 이 문제를 해결하기 위해 파이썬은 코루틴(coroutine)이라는 도구를 제공합니다. - 코루틴은 파이썬에서 사용하는 일반적인 함수의 모양과 비슷하지만, 실행 중에 일시 중단하고 다른 작업으로 전환한 다음 나중에 재개할 수 있는 특수한 함수입니다. | 코루틴(coroutine) 특징 및 예제 - 코루틴은 다음과 같은 특징이 있는데 마치 C#에서 사용하는 비동기 함수를 만드는 방..
· C#
지난번 포스팅에서 Bitmap.Clone과 new Bitmap의 차이를 보여드리며 이미지 복사하는 방법에 대해 알아봤습니다. 이번 포스팅은 Bitmap을 사용하면서 이미지를 복사하는 다른 방법인 Marshal.Copy() 메서드에 대해 작성하였습니다. | Marshal.Copy() 개요 - Marshal.Copy 메서드란 Bitmap 이미지를 관리되는 메모리와 비관리 메모리 간에 복사해야 할 때가 있습니다. 이러한 작업을 효율적으로 수행하기 위해 System.Runtime.InteropServices.Marshal 클래스의 Copy 메서드입니다. 기본 형식) public static void Copy(IntPtr source, byte[] destination, int startIndex, int len..
· C#
C#에서 이미지를 복사해서 작업해야 하는 경우가 있습니다. 복사하는 방법에는 다른 방법이 있지만 주로 저는 Bitmap 클래스의 Clone 메서드를 쓰거나 new Bitmap으로 새로운 객체를 만들기도 하는데요. 실제 코드를 보다 보면 이 두 개를 어떤 상황에서 쓰는지 알 수 없었습니다. 이번 포스팅은 Bitmap.Clone() 메서드와 new Bitmap을 비교하고 간단한 예시로 확인해 보겠습니다. | Bitmap.Clone() - 기존 Bitmap 객체의 복사본을 만드는 데 사용하는 메서드이며 원본 이미지를 변경하지 않으면서 이미지를 조작할 수 있습니다. Clone 작업 후 이미지를 회전, 크롭 등 다양한 작업을 할 수 있습니다. 간단한 예시를 보겠습니다. 예시) Bitmap originalBitma..
우준세
준세 단칸방