프로그래밍 150

[C#] Thread 2개 사용하여 변수 값 공유 테스트

Thread 2개를 사용하게 될 때, 각 Thread 별 가지고 있는 변수가 있다. 아래 코드는 Thread끼리 변수의 값을 공유하는지 확인하는 테스트이다. using System; using System.Threading; namespace Sample_TEST { class ThreadTestProgram { public static void Main(string[] args) { Thread thread = new Thread(() => Run(0)); // 1번째 Thread 실행 thread.Start(); // 5초 지연 시킨다. Thread.Sleep(5000); // 2번째 Thread 실행 Run(1); } public static void Run(int idx) { // Thread 별..

프로그래밍/C# 2022.03.22

[C#] LINQ 이용하여 리스트 2개 비교

Linq에는 두 목록을 비교하는 유용한 방법이 있습니다. Intersect 리스트의 어떤 요소가 포함되어 있는지 확인할 수 있습니다.var source = new List() { "a", "b", "c" }; var compare = new List() { "b", "c", "d" }; var result = source.Intersect(compare); 결과 Except 리스트에 포함되지 않은 요소를 확인할 수 있습니다.var source = new List() { "a", "b", "c" }; var compare = new List() { "b", "c", "d" }; var result = source.Except(compare); 결과 예외사항 아래 예제처럼 Person Class의 요소를 비..

프로그래밍/C# 2022.03.22

스케일 업(Scale-Up), 스케일 아웃(Scale-Out)

운영중인 서비스의 유저 수가 점점 증가가 된다면, 기존의 서버에서는 충분히 운영이 가능했지만 점점 서버의 한계가 보이기 시작한다. 이때 서버 업그레이드가 필요하다. 업그레이드 하는 방법 2가지 스케일 업과 스케일 아웃의 개념에 대해 알아보자. 스케일 업(Scale-Up) 서버의 HW를 기존 사양보다 더 좋은 HW로 업그레이드 하는 방법이다. 예를 들어, CPU나 메모리 등을 추가하는 것이다. 하나의 서버의 능력을 증강하기 때문에 수직 스케일링(vertical scaling)이라고도 한다. 장점 추가적인 네트워크 연결이 필요가 없다. 스케일 아웃보다 유지보수 비용이나 운영이슈가 적다.단점 성능 향상에 한계가 있다. 서버 한대가 부담하는 양이 많아서 위험부담이 높다. 기존 서버를 교체하기 위해 서비스 다운타..

프로그래밍 2022.03.20

[C#] CSV 파일 생성 및 쓰기

CSV 파일 생성 다음 예제는 CSV파일 생성 및 쓰기 기능을 구현합니다. List과 StringBuilder를 활용합니다. StringBuilder 를 사용하면 문자열을 조합할때마다 새로운 변수를 생성하지 않고 결합할 수 있습니다. 내부에 함수가 존재해서 값들을 조합하거나 삭제할때에도 새로운 인스턴스가 생성되지 않습니다. static void Main(string[] args) { string filePath = @"C:\Users\A\Desktop\csv file\file.csv"; List list = new List(); StringBuilder stringBuilder = new StringBuilder(); list.Add("Emma, 010-8842-1344"); list.Add("YG, 0..

프로그래밍/C# 2021.12.01

[C#] Linq - Enumerable.Aggregate

Enumerable.Aggregate 우선, Aggregate는 합계, 총액 이란 뜻으로 직역합니다. Aggregate는 시퀀스에 걸쳐 누적기 함수를 적용합니다. seed(매개변수1)은 초기 누적기 값으로 사용됩니다. Enumerable.Aggregate(seed, func, resultSelector); - 매개변수1 : 누적 시 초기 값으로 사용됩니다. - 매개변수2 : 매개변수1를 포함하여 함수 실행 후 반환합니다. - 매개변수3 : 매개변수2의 반환 값에 대해 함수 실행 후 반환합니다. 사용 예제1 string[] arr_str = new string[] { "a","b","c"}; int[] arr_int = new int[] { 2, 3, 4 }; var res_int = arr_str.Agg..

프로그래밍/C# 2021.10.23

[C#] 확장 메서드 (Extension Method)

확장 메서드 확장명 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 "추가"할 수 있습니다. 확장 메서드는 정적 메서드이지만 확장 형식의 인스턴스 메서드인 것처럼 호출됩니다. 이제 int, string 형 변수에서 사용할 수 있는 IsEven(), Dash() 확장 메서드를 선언해봅시다. 확장 메서드 정의하기 우선 확장메서드를 작성하기에 앞서 조건이 크게 3가지가 존재합니다. 첫째. 확장메서드를 가지는 클래스는 Static 이어야 합니다. 둘째, 확장메서드는 Static 이어야 합니다. 셋째, 확장메서드의 첫번째 매개변수는 this지시어를 붙여야합니다. 즉 예제에서, int타입의 변수에 IsEven이라는 메서드를 추가해서 사용하겠다는 것을 의..

프로그래밍/C# 2021.10.19

[C#] 대리자 (delegate)

https://tapito.tistory.com/45 에서 가져온 글임을 밝힙니다. 이를 테면, C 언어의 함수 포인터에 해당하는 기능이 C#에도 있다는 거죠. 오히려 C 언어의 함수 포인터보다 기능이 더 강화되었습니다. 이번 시리즈에서는 C#이 갖고 있는 3가지 기능. 대리자, 무명 메서드, 람다식에 대해 알아보겠습니다. 1. 대리자(Delegate) 모든 파생된 기법의 근원 C# 초기 버전부터 있던 기능입니다. C 언어의 함수 포인터를 그대로 차용한 거나 다름없죠. 메서드의 위치를 간직하고 있으면서 그 메서드를 대신 실행해 주는 역할을 합니다. 이게 왜 필요한가? 이렇게 이해하시면 간단합니다. 해당 메서드를 직접 호출 할 수 없는 경우, 예를 들면 외부 어셈블리에 있다거나, 그 메서드가 private..

프로그래밍/C# 2021.09.26