본문 바로가기
반응형

프로그래밍503

추상 자료형(Abstract Data Type, ADT)란 무엇인가? 추상 자료형(Abstract Data Type)이란? 구현하고자 하는 구조에 대해 실제 구현 내용이 아닌 자료구조의 특성과 어떤 행동을 하는지 설명하는 타입(혹은 클래스)이다. Abstract Data type (ADT) is a type (or class) for objects whose behavior is defined by a set of values and a set of operations. The definition of ADT only mentions what operations are to be performed but not how these operations will be implemented. It does not specify how data will be organized in.. 2024. 1. 25.
커널 오브젝트(Kernel Object)에 대해서 커널(kernel)이란 컴퓨터를 운영하는 데 있어서 중심이 되는 운영체제의 핵심 부분을 뜻한다. 일반적으로 '커널'이라는 용어와 '운영체제'라는 용어는 같은 의미로 사용되기 때문에 굳이 운영체제에서 커널이 차지하는 영역을 명확하게 구분할 필요는 없다. 커널 오브젝트 : 커널에서 관리하는 중요한 정보를 담아둔 데이터 블록 파일을 실제 생성하고 관리하는 주체는 운영체제이다. 운영체제는 관리를 위해 '접근 정보, 어디까지 읽었는지에 대한 정보'등을 필요로 하는데, 이러한 정보들을 담아둔 블록이 바로 커널 오브젝트다. 리소스를 생성하게 되면 그에 해당하는 커널 오브젝트가 생성된다. 각 커널 오브젝트는 리소스의 특성에 따라 가지는 정보가 다름 커널 오브젝트(Kernel Object)의 이해 프로세스를 생성하고(프.. 2024. 1. 24.
IOCP에 대해서 IOCP(I/O Completion Port)란 무엇인가?소켓이나 파일의 입출력을 최소한의 스레드를 사용해서 처리하는 기법이다. 이를 위한 스레드 풀링이나 비동기 처리등을 운영체제에서 관리해주기 때문에 사용자는 IOCP를 이용해서 쉽고 빠르게 고성능의 입출력 처리가 가능해진다. 추가적으로 설명하자면, 중첩 입출력(Overlapped I/O)이 완료되면 사용자에게 이를 통지해 주는 커널 오브젝트이다. IOCP는 비동기(Asynchronous) + 스레드 풀링(Thread Pooling) + 논 블로킹(Non-Blocking) + 중첩 입출력(Overlapped I/O)과 같은 개념들을 이용해서 작동한다. IOCP의 장점스레드 풀(Thread Pool)을 쉽게 사용할 수 있다. (운영체제가 직접 스레드 풀링.. 2024. 1. 24.
C# 변수 캡처(Capture)에 대해서 람다 변수 캡처(Capture) 람다를 다루다 보면 변수를 캡처하는 상황을 맞이하게 될 것이다. using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List actions = new List(); for (int i = 0; i Console.WriteLine(i)); } foreach (var a in actions) { a.Invoke(); } // 기대하던 출력: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 // 실제 출력: 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 } } 위의 코드를 작.. 2024. 1. 23.
C# 퀵 정렬(Quick Sort)에 대해서 퀵 정렬이란? 이름부터 퀵 정렬이기 때문에 빠르다. 그렇다면 퀵 정렬은 어떤 정렬인가? '찰스 앤토니 리처드 호어(Charles Antony Richard Hoare)'가 개발한 정렬 알고리즘 분할 정복(divide and conquer) 방법 분할, 정복, 결합의 과정으로 진행 불안정 정렬, 비교 정렬 분할 정복 알고리즘에 속하며 평균적으로 매우 빠른 수행 속도를 자랑한다. 퀵 정렬 수행과정 배열의 첫 번째 값을 피벗(pivot)으로 설정한다. low는 left + 1 자리부터 피벗과 비교해서 작으면 한 칸씩 증가한다. high는 right 자리에서부터 피벗과 비교해서 크면 한 칸씩 감소한다. low와 high가 결정되면 서로 스왑한다. 위의 절차를 반복한다. low와 high가 교차하면 정지한다. 피.. 2024. 1. 23.
숫자 10은 허상이다 숫자 10의 고유성은 없다고 생각하자 숫자를 나타내는 digit이라는 영어 단어는 라틴어 digitus에서 유래된 단어이다. 라틴어 digitus는 "손가락 또는 발가락"을 의미한다. 옛 시절부터 손가락, 발가락을 이용해서 숫자를 셋을 것이다. 분명하다. 십진수(decimal, 라틴어로 10을 의미) 만일 인간이 만화의 등장인물들처럼 손에 손가락이 네 개씩밖에 없었다면 어떻게 되었을까? 아마 10에 기반을 둔 수체계를 만들 생각은 절대 하지 못했을 것이다. 그 대신 8에 기반을 둔 수체계를 사용하는 것이 훨씬 더 합리적이라는 점에는 별다른 논란의 여지가 없을 것이다. 이런 숫자 체계를 8에 기반을 둔 수체계 혹은 팔진수라 이야기 한다. 우리가 십진수 체계에서 수를 셀 때는 0,1,2,3,4,5,6,7,8.. 2024. 1. 22.