C#

    SendMessage와 PostMessage

    윈도우 프로그래밍에서 메시지는 윈도우 간 통신과 이벤트 처리의 핵심적인 역할을 합니다. SendMessage와 PostMessage 함수는 윈도우 간 메시지를 전달하는 데 사용되는 두 가지 주요 API입니다.  SendMessage특정 윈도우에 메세지를 직접 전달하고 즉시 결과를 반환합니다. 즉, 메세지가 처리될 때까지 기다립니다.[DllImport("user32.dll")]public static extern IntPtr SendMessage(int hwnd, int wMsg, int wParam, string lParam);// hwnd 메세지를 전달할 윈도우의 핸들// wMsg 잔달할 메세지 ID// wParam 메세지와 함께 전달할 추가 데이터// lParam 메세지와 함께 전달할 추가 데이터//..

    생성자 체이닝 (Constructor Chaining)

    객체 생성은 객체 지향 프로그래밍에서 중요한 개념입니다. 객체를 생성할 때는 생성자를 사용하여 객체의 초기 상태를 설정합니다. 생성자 체이닝은 여러 개의 생성자를 연결하여 객체를 생성하는 기술입니다. 이를 통해 객체 생성 과정을 간결하고 효율적으로 만들 수 있으며, 객체 초기화 코드를 명확하게 구성할 수 있습니다. 1. 생성자 체이닝이란?C#에서 생성자 체이닝은 여러 개의 생성자를 연결하여 객체를 생성하는 기술입니다. 각 생성자는 this 키워드를 사용하여 다음 생성자를 호출합니다. 이를 통해 객체 생성 과정을 간결하고 효율적으로 만들 수 있으며, 객체 초기화 코드를 명확하게 구성할 수 있습니다.class Person{ public Person(string name) { Name ..

    List<T> FindIndex

    FindIndex 메서드는 리스트에서 특정 조건을 만족하는 첫 번째 요소의 인덱스를 찾는 데 사용됩니다. 사용 방법: 1. FindIndex(Predicate match): Predicate 델리게이트를 사용하여 조건을 정의합니다. 델리게이트는 리스트의 각 요소를 검사하고, 조건을 만족하는 경우 true를 반환합니다. 조건을 만족하는 첫 번째 요소의 인덱스를 반환합니다. 조건은 만족하는 요소가 없으면 -1을 반환합니다. 2. FindIndex(int startIndex, Predicate match): 검색을 시작할 인덱스를 지정합니다. startIndex는 0부터 시작하며, 리스트의 크기보다 크거나 같을 수 없습니다. startIndex 이후에 조건을 만족하는 첫 번째 요소의 인덱스를 반환합니다. 조건..

    객체 생성 : Activator.CreateInstance와 new(T)

    C#에서 객체를 생성하는 방법에는 크게 두 가지가 있습니다. 하나는 Activator.CreateInstance 함수를 사용하는 방법이고, 다른 하나는 new 연산자를 사용하는 방법입니다. Activator.CreateInstance Activator.CreateInstance 함수는 지정된 형식의 객체를 생성하는 함수입니다. 이 함수는 다음과 같은 두 가지 인수를 사용합니다. 형식: 생성할 객체의 형식 인수: 생성할 객체에 전달할 인수 Activator.CreateInstance 함수는 다음과 같은 두 가지 방법으로 객체를 생성할 수 있습니다. 기본 생성자: 지정된 형식의 기본 생성자를 사용하여 객체를 생성합니다. 지정된 생성자: 지정된 생성자를 사용하여 객체를 생성합니다. 기본 생성자를 사용하여 객체..

    C# 비트 연산 : enum을 flag로 활용하는 방법

    C#에서 enum은 여러 개의 값을 한 번에 표현할 수 있는 유용한 기능입니다. 하지만, enum을 flag로 사용하려면 몇 가지 제약이 있습니다. enum의 값은 정수여야 합니다. enum의 값은 0부터 시작해야 합니다. 이러한 제약을 해결하기 위해 C#에는 [Flags] 애트리뷰트가 제공됩니다. [Flags] 애트리뷰트를 사용하여 enum을 flag로 사용할 수 있도록 설정할 수 있습니다. 애트리뷰트 설정하기 애트리뷰트를 설정하려면 enum에 다음과 같은 [Flags] 애트리뷰트를 추가하면 됩니다. [Flags] enum MyFlags { None = 0, Flag1 = 1, Flag2 = 2, Flag3 = 4, } 이렇게 하면 MyFlags enum은 0부터 시작하는 정수 값을 갖게 됩니다. 또한..

    C#에서 class와 struct의 차이점

    C#에서 class와 struct는 모두 데이터와 함수를 포함하는 사용자 정의 데이터 형식입니다. 하지만 두 형식에는 몇 가지 중요한 차이점이 있습니다. class와 struct의 주요 차이점 특징 class struct 크기 객체 헤더와 데이터로 구성되어 있어 일반적으로 struct보다 크기가 큽니다. 데이터로만 구성되어 있어 일반적으로 class보다 크기가 작습니다. 포인터 객체는 포인터를 통해 참조됩니다. 구조체는 값으로 전달됩니다. 참조 투명성 객체의 값을 수정하면 참조하는 모든 객체의 값이 수정됩니다. 구조체의 값을 수정하면 원본 구조체의 값만 수정됩니다. 상속 class는 상속을 지원합니다. struct는 상속을 지원하지 않습니다. 포함 class는 다른 class를 포함할 수 있습니다. st..

    C# Linked List

    C#의 링크드 리스트는 연결 리스트라고도 불리며, 각 요소가 다음 요소에 대한 포인터를 가지고 있는 구조입니다. 링크드 리스트는 다음과 같은 특징을 가지고 있습니다. 삽입/삭제 작업이 빠릅니다.링크드 리스트에서 삽입/삭제 작업을 수행할 때는 리스트의 요소를 이동할 필요가 없습니다. 따라서, 삽입/삭제 작업은 O(1)의 시간 복잡도를 갖습니다. 검색 작업이 느립니다. 링크드 리스트에서 검색 작업을 수행할 때는 리스트의 모든 요소를 순회해야 합니다. 따라서, 검색 작업은 O(n)의 시간 복잡도를 갖습니다. 메모리 사용이 효율적입니다. 링크드 리스트는 리스트의 요소가 사용되지 않을 때 자동으로 메모리에서 해제됩니다. 따라서, 메모리 사용이 효율적입니다. 구현 링크드 리스트를 구현하기 위해서는 다음과 같은 코드..

    C# 11.0의 required modifier

    C# 11.0에서는 required modifier가 추가되었습니다. required modifier는 클래스, 구조체, 인터페이스의 필드 또는 속성에 적용하여, 해당 필드 또는 속성이 반드시 초기화되어야 함을 나타냅니다. required modifier 사용하기 required modifier를 사용하려면, 필드 또는 속성에 required 키워드를 추가하면 됩니다. // required modifier 사용 struct Person { public string Name { get; set; } = "John Doe"; public int Age { get; set;; } = 30; public required string Address; } 이 코드에서는 Person 구조체의 Address 속성에 r..