본문 바로가기
728x90

전체 글198

[C#] 스레드의 크리티컬 섹션(Critical Section) public static void IncrementCounter() { for (int i = 0; i < 100000; i++) { counter++; } } 위 메서드는 counter이라는 변수를 100,000번 반복해서 1씩 올리는 작업을 한다. 만약 이 counter 변수를 같이 증가시키는 스레드가 같이 시작되었다고 해보자. Thread t1 = new Thread(IncrementCounter); Thread t2 = new Thread(IncrementCounter); t1.Start(); t2.Start(); t1.Join(); t2.Join(); t1 스레드도 100,000, t2 스레드도 100,000을 올려서 count는 200,000이 되어야할 것 같지만, 실제로 실행시켜보면 매번 다.. 2023. 10. 11.
[C#] 스레드(Thread) 스레드(Thread) 멀티 스레드 멀티 스레딩은 말 그대로 하나의 프로그램에서 여러 개의 스레드를 동시에 실행하는 것을 의미한다. 각 스레드는 독립적으로 실행되며, 병렬 처리가 가능하기 때문에 성능이 향상될 수 있다. 하지만 너무 과한 멀티 스레딩은 오히려 성능을 저하시키고, 구현이 복잡하기 때문에 적절한 상황에서 사용하여야 한다. 스레드 시작하는 법 1. Thread 인스턴스 생성 2. Thread.Start()로 스레드 시작 3. Thread.Join()으로 스레드 종료 대기 // No Parameter Thread thread = new Thread(Run); thread.Start(); thread.Join(); // Parameter exist Thread thread2 = new Thread(.. 2023. 10. 11.
[C#] 리플렉션(Reflection): 동적 메서드 생성하기 Reflection 리플렉션을 활용하면 동적으로 메서드도 생성하고, 동적으로 인스턴스를 생성해서 메서드를 실행시킬 수 있다. 1. Assembly 만들기 AssemblyBuilder assembly = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("CalculatorAssembly"), AssemblyBuilderAccess.Run); 2. Assembly 안에 Module 만들기 ModuleBuilder module = assembly.DefineDynamicModule("CalculatorModule"); 3. Module 안에 Class 만들기 TypeBuilder type = module.DefineType("CalculatorClass"); .. 2023. 10. 11.
[C#] 리플렉션(Reflection): 동적 인스턴스 생성하기 Reflection 리플렉션을 이용해서 동적 인스턴스를 생성하기 위해서는 아래와 같이 선언해주면 된다. object a = Activator.CreateInstance(Type); 이번에도 Inventory라는 클래스를 만들어서 Inventory 인스턴스를 동적으로 생성해보자. class Inventory { private string product; private int count; public Inventory() { product = ""; count = 0; } public Inventory(string product, int count) { this.product = product; this.count = count; } public void Print() { Console.WriteLine($.. 2023. 10. 10.
[C#] 리플렉션(Reflection) Reflection 리플렉션 리플렉션(Reflection)은 '반사'라는 뜻이다. 반사되면 자신의 모습이 보이는 것처럼, C#에서 리플렉션은 자기 자신에 대한 정보를 반사하듯이 보는 기능을 말한다. 다시 정확히 정리하자면, 리플렉션이란 런타임 중에 프로그램의 메타데이터를 얻고 수정할 수 있는 기능이다. 객체의 형식 이름, 프로퍼티, 메서드, 필드, 이벤트 등 그 객체의 정보를 들여다볼 수 있다. 메타데이터는 데이터에 관한 데이터이다. 즉, 데이터에 대한 설명, 구조, 속성 또는 다른 데이터의 정보를 담고 있는 데이터를 말한다. 리플렉션이 필요한 이유 그렇다면 리플렉션은 왜 필요한 것일까? 리플렉션은 주로 단위 테스트를 할 때 많이 쓰인다. 코드의 각 부분이 올바르게 작동하는지 확인할 때, 우리는 그 메서.. 2023. 10. 10.
[TopCoder] BrokenStrings (C#, Java) https://arena.topcoder.com/#/u/practiceCode/13700/6947/7748/1/299645 Topcoder Arena Topcoder Arena Web arena.topcoder.com 문제 요약 -기타의 줄을 새로 사야하는데, 각 브랜드에서는 6개의 줄을 패키지로 구입하거나, 단품으로 1개의 줄을 구입할 수 있다. -문자열 stringCosts는 한 브랜드의 "패키지가격 단품가격"으로 구성되어 있다. -한 번에 여러 브랜드에서 구입할 수 있다. -최소한 n개의 줄을 구입하는 데 필요한 최소 비용을 찾아야 한다. 예시로, n=4, stringCosts={"12 3", "15 4"}로 주어졌을 때, 첫번째 브랜드에서 1개의 패키지로 사거나(12), 첫번째 브랜드에서 단품으로.. 2023. 10. 10.
[이것이 C#이다] Chapter15: 연습문제 (LINQ) 1. 다음과 같은 배열이 있다고 할 때, Cost는 50이상, MaxSpeed는 150 이상인 레코드만 조회하는 LINQ를 작성하세요. class Car { public int Cost { get; set; } public int MaxSpeed { get; set; } } class MainApp { static void Main(string[] args) { // ... Car[] cars = { new Car(){Cost= 56, MaxSpeed= 120}, new Car(){Cost= 70, MaxSpeed= 150}, new Car(){Cost= 45, MaxSpeed= 180}, new Car(){Cost= 32, MaxSpeed= 200}, new Car(){Cost= 82, MaxSpeed.. 2023. 10. 5.
[C#] 람다식과 Func, Action 대리자 람다식 선언하는 법 람다식은 기본적으로 (매개변수 목록) => 식 혹은 {코드블록} 형태를 가지고 있다. 예를 들자면 아래 두 코드는 같은 무명 함수를 의미한다. HelloWorld H = delegate(int a, int b) { return a + b; } HelloWorld H = (a, b) => a + b; Func 대리자 Func 대리자는 최대 16개의 매개변수를 가질 수 있다. (0개 ~ 17개) Func addOne = (int x) => x + 1; int result1 = addOne(5); // 6 보통은 Func라고 선언하기 보다는, var로 선언한다. var addTwo = (int x) => x + 2; int result2 = addTwo(5); // 7 Action 대리자 .. 2023. 9. 18.
728x90

"); wcs_do();