프로그래밍 언어

    C++ 전처리기로 코드 영역 블록 설정

    #pragma region에서는 Visual Studio 편집기의 개요 기능을 사용할 때 확장하거나 축소할 수 있는 코드 블록을 지정할 수 있다. #pragma region이름 #pragma endregion코멘트 // pragma_directives_region.cpp #pragma region Region_1 void Test() {} void Test2() {} void Test3() {} #pragma endregion Region_1 int main() {} 참고 : region 및 endregion pragma | Microsoft Learn

    C# Thread 클래스 (스레드)

    스레드의 생성 C#에서 쓰레드를 만드는 기본적인 클래스로 System.Threading.Thread라는 클래스가 있다. 이 클래스의 생성자(Constructor)에 실행하고자 하는 메서드를 델리게이트로 지정한 후, Thread클래스 객체에서 Start() 메서드를 호출하면 새로운 쓰레드가 생성되어 실행되게 된다. 아래 예는 동일 클래스 안의 Run() 메서드를 실행하는 쓰레드를 하나 생성한 후 실행시키는 예제이다. 예제에서는 기본적으로 생성된 메인 쓰레드에서도 동일하게 Run()메서드를 호출하고 있으므로, Begin/End문장이 2번 출력되고 있는데, 이는 2개의 쓰레드가 동시에 한 메서드를 실행하고 있기 때문이다. namespace MultiThrdApp { using System; using Syst..

    C# Task 클래스

    Task 클래스와 이의 Generic형태인 Task클래스는 .NET 4.0에 도입된 새로운 클래스들로서 쓰레드풀로부터 쓰레드를 가져와 비동기 작업을 실행한다. Task 관련 클래스들과 Parallel 클래스들을 합쳐 Task Parallel Library(TPL)이라 부르는데, 이들은 기본적으로 다중 CPU 병렬 처리를 염두에 두고 만들었다. Task 클래스는 .NET 4.0 이전 버전의 ThreadPool.QueueUserWorkItem()와 같은 기능을 제공하지만, 보다 빠르고 유연한 기능을 갖추고 있다. Task클래스 사용을 위해 흔히 사용되는 방법은 Task.Factory.StartNew()를 사용하여 실행하고자 하는 메서드에 대한 델리케이트를 지정하는 것이다. 이 StartNew()는 쓰레드를 ..

    C# foreach 사용법과 다양한 예제

    1. foreach 의미 끝을 지정해주는 다른 반복문과 달리, 인자로 들어온 itrable-item의 내부 인덱스 끝까지 알아서 순환을 해주는 반복문이다. foreach (element in iterable-item) { // body } : 여기서 element는 데이터 타입과 변수명을 포함하고. 아래와 같이 사용된다. : foreach(string str in arr); : foreach(데이터타입 변수명 in 배열,컬렉션등) 2. foreach 예제1 - 1차원 배열에서의 foreach public static void Main(string[] args) { int[] arr = { 11, 12, 13, 14, 15, 16, 17 }; //foreach문 Console.WriteLine("## fo..

    C# 배열 복사

    1. Array.CopyTo(Array destArray, int index) // srcArray의 데이터를 인자로 전달한 destArray에 저장한다. // destArray의 마지막 인자의 인덱스 부터 저장된다. byte[] sourceArray = new byte[10]; // 복사를 할 배열 byte[] destinationArray = new byte[10]; // 복사를 당할 배열 // 복사 할 배열의 데이터를 삽입 for (int i = 0; i < 10; ++i) sourceArray[i] = (byte)i; // 복사하기전 복사를 당할 배열의 데이터를 출력 for (int i = 0; i < 10; ++i) Console.Write($"{destinationArray[i]} "); //..

    C++ std::shared_ptr로 thread safe callback 구현하기

    리소스를 로딩한다거나 어떤 연산을 수행하기 위해 thread를 만들어서 동작시킬 수 있지만 thread가 언제 끝날지 보장할 수 없기 때문에 이것에 대해 방어적인 코딩이 필요하다. 예를 들어 리소스를 thread로 로딩하고 로딩이 완료될 때 마다 해당 인스턴스로 callback을 하여 리소스 로딩이 완료되었음을 알려주는 구현이라고 가정하자. 이 인스턴스는 자신이 요청한 thread가 완료될 때 까지 삭제하면 안되지만 thread가 언제 끝날지 보장할 수 없기 때문에 thread가 언제 끝나더라도 동작하도록 구현할 필요가 있다. unsafe callback with raw pointer 기존 pointer를 사용해서 구현할 경우 아래와 비슷한 흐름을 가지게 될 것이다. class Character { pu..

    C# 배열 초기화, 다차원배열, 가변배열에 대해서

    1. C# 배열의 선언 초기화 사용 방법 (Array) -> 배열이란 ? : 배열이란 관련있는, 비슷한 데이터를 효과적으로 관리하기 위한 자료구조다. : 배열을 이용하면 연관되어있는 데이터들을 for문과 결합하여 손쉽게 순회 할 수 있다. C#에서의 배열 선언 방법 1. 기본 모양 - 자료형[] 변수이름 = new 자료형[N] { 초기화 하거나 안하거나}; 2. 배열의 요소 개수를 지정하고 선언과 동시에 초기화 하는 방법 - int[] arr1 = new int[5] { 11, 12, 13, 14, 15 }; 3. 배열의 요소 개수를 지정하지 않고 선언과 동시에 초기화 하는 방법 - int[] arr1 = new int[] { 11, 12, 13, 14, 15 }; 4. 배열의 요소 개수를 지정하고, 추..

    C# 제네릭 형식 제약 조건 (where)

    제네릭 제약 조건 추가 class GenericClass { public T objMember { get; set; } } class Program { static void Main(string[] args) { GenericClass genericObj1 = new GenericClass(); GenericClass genericObj2 = new GenericClass(); GenericClass genericObj3 = new GenericClass(); } } 제네릭은 모든 타입을 허용하는 기법이므로 GenericClass 클래스의 objMember 멤버 변수는 값 형식인 int형이 될 수도 있고 참조 형식인 string형과 ArrayList 타입도 가능하다. "GenericClass 클래스의 o..

    C# string.format, 문자열 보간($)을 이용한 문자열 출력 방법

    1. C# string 출력 방법 : 기본 출력 //직접 Console.WriteLine("BlockDMask1"); //변수 이용 string str2 = "BlockDMask2"; Console.WriteLine(str2); 2. C# string 출력 방법2 : Format() 메소드 //format 이용 방법1 Console.WriteLine("Example1 : {0}, {1}", "BlockDMask", 1212); //format 이용 방법2 int num = 999; string str1 = string.Format("Example2 : {0}, {1}, {2}", "BlockDMask", 3434, num); 3. C# string 출력 방법3 : 문자열 보간 //문자열 보간 이용 방법 ..

    C 조건부 전처리기

    1. #if #elif #else #endif 기존에 알고있는 조건문인 if else 와 동일한 내용이다 하지만 전처리기라는 부분에서 if else와 차이점은 매크로로 정의된 값에 따라 원하는 코드를 동작할 수도 있고 동작시키지 않을수도 있는 것이다. #include #define NUM 10 int main() { #if NUM == 10 printf("매크로로 정의된 NUM의 값은 10\n"); #elif NUM == 20 printf("매크로로 정의된 NUM의 값은 20\n"); #else printf("매크로로 정의된 NUM의 값은 10도 20도 아님\n"); #endif return 0; } #if 0, #if 1 평가값이 0 이면 다음줄 부터의 내용을 건너뛰고, 평가값이 0이 아니면 처리한다...