프로그래밍/C# 62

[C#] 파일 목록 가져오기

GetFiles 현재 디렉터리에 있는 파일 목록을 가져오려면 GetFiles 메서드를 사용합니다. var dir = new DirectoryInfo(@"C:Windows"); FileInfo[] files = dir.GetFiles(); foreach (var item in files) { Console.WriteLine($"파일명 : {item.Name}"); } EnumerateFiles .NET 프레임워크 4.0 이후 버전에서 EnumerateFiles 메서드를 사용해 파일 목록을 가져올 수 있습니다. var dir = new DirectoryInfo(@"C:Windows"); // .txt 확장자 파일을 구합니다. // 두번째 인수 `SearchOption.AllDirectories`를 설정하면 ..

프로그래밍/C# 2022.05.14

[C#] 폴더와 파일 구분하기

지정된 폴더 안에서 파일과 폴더 구분해봅시다. GetFileSystemInfos DirecotryInfo 클래스에 있는 GetFileSystemInfos 메서드를 사용합니다. var dir = new DirectoryInfo(@"C:\Users\A\source\test"); // 폴더 경로 FileSystemInfo[] fileSystemInfos = dir.GetFileSystemInfos(); foreach (var item in fileSystemInfos) { // 디렉터리 여부를 판별합니다. if ((item.Attributes & FileAttributes.Directory) == FileAttributes.Directory) Console.WriteLine($"this is dir : {it..

프로그래밍/C# 2022.05.14

[C#] StringBuilder로 문자열 연결하기

문자열은 변하지 않는 객체입니다. 예를 들어, 다음 코드는 abc 뒤에 xyz을 붙여 연결되는 것이 아니라, 새로운 6자 크기의 인스턴스가 생성되고, 인스턴스에 abc, xyz가 복사됩니다. string str1 = "abc" str1 += "xyz"; 만약 반복해서 문자열을 연결하는 코드를 작성하게 되면 비효율적인 리소스 낭비가 이뤄질 수 있습니다. StringBuilder 클래스를 사용하면 문자열을 효율적으로 연결할 수 있습니다. var sb = new StringBuilder(); //객체 생성 sb.Append("안녕하세요, "); //문자열 추가 sb.Append("Victory Ha"); sb.Append("입니다."); var result = sb.ToString(); //문자열 변환 Str..

프로그래밍/C# 2022.05.07

[C#] 지정한 문자로 문자열 분할하기

Split 메서드를 사용하면 지정한 문자로 해당 문자열을 분할할 수 있습니다. Split 사용 예제1 공백으로 분할하기var text = "안녕하세요, Vicotory Ha 입니다."; var res = text.Split(" "); Split 사용 예제2 ,와 공백으로 분할하기 var text = "where is car."; var res = text.Split(new [] {" ",","}, StringSplitOptions.RemoveEmptyEntries); StringSplitOptions.RemoveEmptyEntries 옵션을 지정하면 빈 배열 요소를 포함하지 않게 합니다.

프로그래밍/C# 2022.05.07

[C#] Thread 동기화하기 Lock , Monitor

Lock C# 서비스 개발에 있어 비동기 프로그래밍은 필수적이라고 할 수 있다. 멀티 쓰레드를 사용하여 리소스에 동시에 액세스하여 빠른 처리가 가능하다. 한 개의 데이터를 여러개의 쓰레드가 동시에 접근, 변경하는 경우 Thread Unsafe하다고 말한다. Lock키워드는 특정 블럭의 코드(Critical Section이라 부른다)를 한번에 하나의 쓰레드만 실행할 수 있도록 해준다. 한번에 하나의 쓰레드만 사용하기 때문에 Thread Safe 하다고 말할 수 있다. Critical Section은 가능한 한 범위를 작게하는 것이 좋다. class SampleProgram { private static object _lock = new object(); static void Main(string[] arg..

프로그래밍/C# 2022.04.01

[C#] LINQ 연습하기

LINQ 연습하기 Exists ForEach Where Select using System; using System.Collections.Generic; using System.Linq; namespace Sample_TEST { class SampleProgram { public static void Main(string[] args) { // list 선언 및 초기화 var nums = new List { 12, 87, 94, 14, 53, 20, 40, 35, 76, 91, 31, 17, 48 }; //Q1. LINQ의 Exists 메서드 사용하여, 8, 9로 나누어 떨어지는지 확인 if (nums.Exists(x => x % 8 == 0 || x % 9 == 0)) Console.WriteLine..

프로그래밍/C# 2022.03.27

[C#] 문자열 거꾸로 변환하기

String 변수 거꾸로 출력하기 string 형 변수의 문자열을 거꾸로 바꿔 출력하는 방법을 알아봅시다. EX> "안녕하세요" -> "요세하녕안" using System; namespace Sample_TEST { class SampleProgram { public static void Main(string[] args) { // str 변수 선언 및 초기화 string str = "Hello World."; // str을 char형 배열로 변환 후 reversStr변수에 초기화 char[] reverseStr = str.ToCharArray(); // Array.Reverse()메서드 사용하여 // 매개변수의 요소들을 역순으로 재배열 Array.Reverse(reverseStr); // str 문자열..

프로그래밍/C# 2022.03.27

[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

[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