CSharp53 Span<T>와 stackalloc으로 고성능 버퍼 직접 관리하기 Span와 stackalloc으로 고성능 버퍼 직접 관리하기 C#에서는 Span와 stackalloc을 활용하면 GC 힙을 피하고 스택 메모리를 사용하여 고성능의 임시 버퍼를 직접 관리할 수 있습니다. 특히 실시간 시스템이나 반복 계산 루틴 등에서 매우 유용합니다. using System; class Program { static void Main() { Span buffer = stackalloc int[5]; for (int i = 0; i { buffer[i] = i * 2; } Console.WriteLine("스택 버퍼 내용:"); foreach (var n in buf.. 2025. 5. 16. OrderBy()와 ThenBy()로 정렬 기준 다중 지정하기 OrderBy()와 ThenBy()로 정렬 기준 다중 지정하기 LINQ의 OrderBy()와 ThenBy() 메서드를 사용하면 리스트나 배열을 여러 기준으로 정렬할 수 있습니다. 데이터를 우선순위와 부속 조건에 따라 정렬할 때 매우 유용합니다. using System; using System.Collections.Generic; using System.Linq; class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { var people = new List { new Pers.. 2025. 5. 15. Select()로 컬렉션의 각 요소 가공하기 Select()로 컬렉션의 각 요소 가공하기 LINQ의 Select() 메서드는 컬렉션 내 요소를 다른 형태로 가공하거나 변환할 때 사용됩니다. 원본 데이터를 유지하면서 가공된 새 결과를 반환할 수 있어, 데이터 처리에 매우 유용합니다. using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List numbers = new List { 1, 2, 3, 4, 5 }; var squares = numbers.Select(n => n * n); Console.WriteLine("제곱값 리스트:"); for.. 2025. 5. 14. string.Format()으로 문자열 포맷 지정하기 string.Format()으로 문자열 포맷 지정하기 string.Format()은 텍스트 내에 변수 값을 삽입할 수 있는 다양한 서식 지정 기능을 제공합니다. 숫자, 날짜, 통화 등 포맷이 필요한 문자열 출력에서 매우 유용하게 사용됩니다. using System; class Program { static void Main() { string name = "델파이사이트"; int visitors = 1234; DateTime today = DateTime.Today; string message = string.Format("📅 {0:yyyy-MM-dd} 기준, {1} 방문자 수: {2:N0}명", .. 2025. 5. 13. Expression Tree를 활용한 동적 코드 구성 Expression Tree를 활용한 동적 코드 구성 C#의 System.Linq.Expressions 네임스페이스를 이용하면 코드를 데이터처럼 구성할 수 있습니다. 컴파일 시점이 아닌 실행 시점에 식(함수, 연산)을 생성하고 조합할 수 있어 ORM, 규칙 엔진, 동적 쿼리 작성 등 고급 시나리오에 적합합니다. using System; using System.Linq.Expressions; class Program { static void Main() { // Expression: (int x) => x + 1 ParameterExpression param = Expression.Parameter(typeof(int), "x"); Express.. 2025. 5. 9. using 블록 없이 using 선언으로 자원 자동 해제하기 using 블록 없이 using 선언으로 자원 자동 해제하기 C# 8.0부터 도입된 using 선언은 블록을 사용하지 않아도 IDisposable 객체를 자동으로 정리해 줍니다. 코드를 간결하게 만들면서도 리소스 누수를 방지할 수 있는 유용한 기능입니다. using System; using System.IO; class Program { static void Main() { using var writer = new StreamWriter("log.txt"); writer.WriteLine("이 내용은 파일에 기록됩니다."); Console.WriteLine("파일 작성 완료!"); } } using var 선언은 해당 범위(scope)가 .. 2025. 5. 8. Stopwatch로 코드 실행 시간 측정하기 Stopwatch로 코드 실행 시간 측정하기 성능을 측정하거나 특정 블록의 실행 시간을 확인하고 싶을 때, System.Diagnostics.Stopwatch 클래스를 사용하면 정확한 시간 측정이 가능합니다. using System; using System.Diagnostics; using System.Threading; class Program { static void Main() { Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(1500); // 테스트용으로 1.5초 대기 sw.Stop(); Console.WriteLine($"실행 시간: {sw.Elapse.. 2025. 5. 7. string.Contains()로 문자열 포함 여부 간단히 확인하기 string.Contains()로 문자열 포함 여부 간단히 확인하기 C#의 string.Contains() 메서드를 사용하면 텍스트 내에 특정 문자열이 포함되어 있는지를 간단하고 직관적으로 검사할 수 있습니다. 검색, 필터링, 조건 분기 등에 유용하게 사용됩니다. using System; class Program { static void Main() { string message = "안녕하세요, 모노솔루션입니다."; if (message.Contains("모노")) { Console.WriteLine("✅ 회사명이 포함되어 있습니다."); } else { .. 2025. 5. 5. List<T>.Find()로 조건에 맞는 첫 번째 항목 찾기 List.Find()로 조건에 맞는 첫 번째 항목 찾기 List의 Find() 메서드는 조건을 만족하는 첫 번째 요소를 간편하게 찾을 수 있는 기능입니다. 복잡한 반복문 없이도 원하는 항목을 빠르게 추출할 수 있어 실용적입니다. using System; using System.Collections.Generic; class Program { static void Main() { List names = new List { "John", "Jane", "Steve", "Sara" }; string result = names.Find(name => name.StartsWith("S")); Console.WriteLine("조건에 맞는 이름: " +.. 2025. 5. 1. Array.Exists()로 배열 조건 빠르게 검사하기 Array.Exists()로 배열 조건 빠르게 검사하기 C#의 Array.Exists() 메서드는 배열에 특정 조건을 만족하는 요소가 하나라도 존재하는지 간단하게 검사할 수 있는 방법입니다. 불필요한 반복문 없이 조건 검사를 간결하게 표현할 수 있어 유용합니다. using System; class Program { static void Main() { int[] numbers = { 3, 7, 9, 12, 15 }; bool hasEven = Array.Exists(numbers, n => n % 2 == 0); Console.WriteLine(hasEven ? "✅ 배열에 짝수가 있습니다." : ".. 2025. 4. 30. string.IsNullOrWhiteSpace()로 문자열 안전하게 검사하기 string.IsNullOrWhiteSpace()로 문자열 안전하게 검사하기 C#에서는 string.IsNullOrWhiteSpace() 메서드를 사용하면 문자열이 null, 빈 문자열("") 또는 공백만 있는 경우를 한 번에 검사할 수 있습니다. 조건문을 깔끔하게 만들고, 널 포인터 예외도 예방할 수 있어 매우 유용합니다 using System; class Program { static void Main() { string input = " "; if (string.IsNullOrWhiteSpace(input)) { Console.WriteLine("⚠️ 입력값이 비어있거나 공백입니다."); } .. 2025. 4. 29. File.ReadAllText()로 파일 전체 읽기 File.ReadAllText()로 파일 전체 읽기 C#에서는 File.ReadAllText() 메서드를 사용하면 텍스트 파일 전체를 한 번에 간단하게 읽어올 수 있습니다. 짧은 텍스트 파일을 빠르게 읽어야 할 때 매우 유용합니다. using System; using System.IO; class Program { static void Main() { string filePath = "sample.txt"; if (File.Exists(filePath)) { string content = File.ReadAllText(filePath); Console.WriteLine("파일 내용:\n" + conte.. 2025. 4. 28. Guid로 전 세계에서 유일한 값 생성하기 Guid로 전 세계에서 유일한 값 생성하기 Guid(Globally Unique Identifier)는 거의 충돌이 발생하지 않는 고유 식별자를 생성할 수 있어, 데이터베이스 키, 파일명, 트랜잭션 ID 등 다양한 곳에 활용됩니다. using System; class Program { static void Main() { Guid id = Guid.NewGuid(); Console.WriteLine($"새로운 GUID: {id}"); } } 출력 결과 예시 새로운 GUID: 3f2504e0-4f89-11d3-9a0c-0305e82c3301 Guid.NewGuid()를 호출하면 새로운 고유 식별자가 생성됩니다. 128비트 크기로 구성되어, 전 세계 어디.. 2025. 4. 26. DateTime과 TimeSpan으로 시간 계산하기 DateTime과 TimeSpan으로 시간 계산하기 C#의 DateTime과 TimeSpan은 날짜 및 시간 관련 작업을 매우 정밀하고 직관적으로 처리할 수 있도록 도와줍니다. 기간 계산, 남은 시간 체크, 타임스탬프 기록 등에 자주 사용됩니다. using System; class Program { static void Main() { DateTime start = new DateTime(2025, 4, 1); DateTime end = DateTime.Now; TimeSpan duration = end - start; Console.WriteLine($"시작일: {start}"); Console.WriteLine(.. 2025. 4. 25. Environment 클래스로 시스템 정보 가져오기 Environment 클래스로 시스템 정보 가져오기 C#의 System.Environment 클래스는 운영 체제, 시스템 경로, 사용자 정보 등 다양한 환경 정보를 손쉽게 가져올 수 있도록 도와줍니다. 로그 기록, 시스템 체크, 경로 자동 설정 등에 매우 유용합니다. using System; class Program { static void Main() { Console.WriteLine("OS 버전: " + Environment.OSVersion); Console.WriteLine("사용자 이름: " + Environment.UserName); Console.WriteLine("머신 이름: " + Environment.MachineName);.. 2025. 4. 24. readonly struct로 불변 값 타입 만들기 readonly struct로 불변 값 타입 만들기 C#의 readonly struct는 값 타입(Struct)의 불변성을 보장해주며, 성능과 안정성 모두를 고려할 수 있는 구조입니다. 수학, 그래픽, 좌표계 등에서 많이 활용됩니다. using System; public readonly struct Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Length => Math.Sqrt(X * X + Y * Y); } class Program { static void Main() .. 2025. 4. 23. switch 표현식으로 깔끔한 조건 분기 구현하기 switch 표현식으로 깔끔한 조건 분기 구현하기 C# 8.0부터 지원되는 switch 표현식은 기존의 switch문보다 더 간결하고 가독성 좋은 조건 분기 방식입니다. 조건마다 값을 반환해야 할 때 매우 유용하며, 함수형 스타일 코딩에 적합합니다. using System; class Program { static void Main() { string role = "admin"; string permission = role switch { "admin" => "모든 권한", "user" => "일반 권한", "guest" => "읽기 전용", _ => "알 수.. 2025. 4. 22. async/await로 비동기 프로그래밍 구조화하기 async/await로 비동기 프로그래밍 구조화하기 async와 await는 C#에서 비동기 작업을 처리하는 핵심 도구입니다. UI 응답성을 유지하거나, I/O 작업을 효율적으로 처리하고 싶다면 반드시 알아야 할 기능입니다. using System; using Systehttp://m.Net.Http;using Systehttp://m.Threading.Tasks;class Program { static async Task Main() { Console.WriteLine("데이터 가져오는 중..."); string data = await GetDataAsync(); Console.WriteLine("결과: " + data.Substring(0.. 2025. 4. 21. List<T>와 AddRange()로 다중 요소 추가하기 List와 AddRange()로 다중 요소 추가하기\ C#의 List는 유연하고 자주 쓰이는 컬렉션 타입 중 하나입니다. 여러 개의 데이터를 한 번에 추가할 때는 Add() 대신 AddRange()를 사용하여 효율적으로 처리할 수 있습니다. using System; using System.Collections.Generic; class Program { static void Main() { List fruits = new List { "사과", "바나나" }; List moreFruits = new List { "포도", "복숭아", "수박" }; fruits.AddRange(moreFruits); Console.WriteLine.. 2025. 4. 18. params 키워드로 가변 인자 받기 params 키워드로 가변 인자 받기C#의 params 키워드를 사용하면 인자 개수에 제한 없이 배열처럼 값을 전달할 수 있어 유연한 메서드 구현이 가능합니다. 오버로드 없이도 다양한 수의 인자를 처리할 수 있어 코드가 간결해집니다. using System; class Program { static void Main() { PrintNumbers(1, 2, 3); PrintNumbers(10, 20); PrintNumbers(); // 인자 없이도 호출 가능 } static void PrintNumbers(params int[] numbers) { Console.WriteLine("입력된 숫자들: " + s.. 2025. 4. 17. 이전 1 2 3 다음