본문 바로가기

csharp22

enum을 활용한 의미 있는 상수 집합 정의 enum을 활용한 의미 있는 상수 집합 정의 enum(열거형)은 관련된 상수 값을 이름으로 표현할 수 있게 해주는 C#의 기능입니다. 의미 있는 이름으로 코드를 작성하면 가독성, 유지보수성이 모두 좋아집니다. using System; enum OrderStatus { Pending, Processing, Shipped, Delivered, Cancelled } class Program { static void Main() { OrderStatus status = OrderStatus.Shipped; Console.WriteLine($"주문 상태: {status}"); if (status == OrderSta.. 2025. 4. 16.
string interpolation으로 문자열 조합 간결하게 하기 string interpolation으로 문자열 조합 간결하게 하기C#의 문자열 보간(String Interpolation) 기능을 사용하면 문자열을 더 간단하고 가독성 좋게 조합할 수 있습니다. 기존의 + 연산이나 string.Format()보다 더 직관적인 문법을 제공합니다. using System; class Program { static void Main() { string name = "홍길동"; int age = 21; string message = $"안녕하세요, 제 이름은 {name}이고 나이는 {age}살입니다."; Console.WriteLine(message); } } 출력 결과 안녕하세요, 제 이름은 홍.. 2025. 4. 15.
try-catch-finally 구문으로 예외 처리 완전 정복! try-catch-finally 구문으로 예외 처리 완전 정복! C#에서는 프로그램 실행 중 예외 상황이 발생할 수 있으며, 이를 try-catch-finally 구문으로 안전하게 처리할 수 있습니다. 오류를 잡고, 리소스를 정리하고, 사용자에게 친절한 메시지를 제공하는 것은 프로 개발자의 기본입니다! using System; class Program {     static void Main()     {         try         {             Console.Write("숫자를 입력하세요: ");             int number = int.Parse(Console.ReadLine());             Console.WriteLine($"입력한 숫자: {number}".. 2025. 4. 14.
Tuple을 활용한 다중 값 반환 Tuple을 활용한 다중 값 반환  C#에서는 Tuple을 사용하여 메서드에서 여러 값을 간단하게 반환할 수 있습니다. 클래스를 만들 필요 없이 깔끔한 반환 구조를 만들 수 있어 매우 유용합니다. using System; class Program {     static void Main()     {         var (sum, product) = Calculate(4, 5);         Console.WriteLine($"합계: {sum}, 곱셈: {product}");     }     static (int, int) Calculate(int a, int b)     {         return (a + b, a * b);     } } Tuple은 여러 값을 한 번에 반환할 때 사용되며 (.. 2025. 4. 12.
lock 키워드로 멀티스레딩 동기화 lock 키워드로 멀티스레딩 동기화 멀티스레드 환경에서는 하나의 리소스를  여러 스레드가 동시에 접근할 수 있기 때문에  데이터 무결성을 유지하려면 동기화가 필수입니다. C#의 lock 키워드를 사용하면 간단하게  **임계 구역(Critical Section)**을 만들어 스레드 충돌을 방지할 수 있습니다. using System; using System.Threading; class Counter {     private int _count = 0;     private readonly object _lock = new object();     public void Increment()     {         lock (_lock)         {             _count++;       .. 2025. 4. 11.
??= 널 병합 할당 연산자 ??= 널 병합 할당 연산자C# 8.0부터 도입된 ??= 연산자는 값이 null일 경우에만 할당을 수행합니다. 조건문 없이 깔끔하게 기본값을 설정할 수 있어 가독성과 생산성을  모두 향상시킬 수 있습니다. using System; class Program {     static void Main()     {         string name = null;         name ??= "기본 이름";         Console.WriteLine($"사용자 이름: {name}");     } } 출력 결과 사용자 이름: 기본 이름 ● ??=는 변수에 값이 null일 경우에만 오른쪽 값을 할당합니다. ● if (x == null) x = y;를 더 간결하게 표현한 것과 동일합니다. ● 코드 흐름을 깔끔.. 2025. 4. 10.
foreach와 yield return을 활용한 커스텀 이터레이터 foreach와 yield return을 활용한 커스텀 이터레이터 C#의 yield return을 사용하면 반복자의 상태를 직접 관리하지 않고도  커스텀 이터레이터를 간결하게 구현할 수 있습니다. 필터링, 지연 실행, 파이프라인 처리 등에 매우 유용합니다. using System; using System.Collections.Generic; class Program {     static void Main()     {         foreach (int prime in GetPrimesBelow(10))         {             Console.WriteLine($"소수: {prime}");         }     }     static IEnumerable GetPrimesBelow(.. 2025. 4. 8.
s 및 패턴 매칭으로 타입 검사 간소화하기 s 및 패턴 매칭으로 타입 검사 간소화하기C#의 is 키워드와 패턴 매칭을 활용하면  객체의 타입을 검사하고 동시에 캐스팅까지  깔끔하게 처리할 수 있습니다. as와 null 체크보다 안전하고, switch와 함께 사용하면  더 강력한 조건 분기를 만들 수 있습니다. using System; class Animal { } class Dog : Animal {     public void Bark() => Console.WriteLine("멍멍!"); } class Program {     static void Main()     {         Animal pet = new Dog();         if (pet is Dog dog)         {             dog.Bark();    .. 2025. 4. 7.
readonly 필드로 불변 객체 만들기 readonly 필드로 불변 객체 만들기  readonly 키워드는 객체 생성 이후 값을  변경할 수 없는 필드를 선언할 때 사용합니다. 이 키워드를 통해 클래스의 상태를 안정적으로 유지할 수 있으며,  특히 멀티스레딩 환경에서 유용합니다. using System; class Circle {     private readonly double _radius;     public Circle(double radius)     {         _radius = radius;     }     public double Area => Math.PI * _radius * _radius; } class Program {     static void Main()     {         Circle c = new C.. 2025. 4. 4.
null-coalescing 연산자 ??로 기본값 설정하기 null-coalescing 연산자 ??로 기본값 설정하기 C#의 ?? 연산자는 값이 null일 경우 대체값을  지정할 수 있는 간결한 방법을 제공합니다. 널 검사와 기본값 할당을 한 줄로 처리할 수 있어  코드가 훨씬 깔끔해집니다. using System; class Program {     static void Main()     {         string name = null;         string displayName = name ?? "사용자";         Console.WriteLine($"환영합니다, {displayName}님!");     } } 출력 결과 환영합니다, 사용자님! ● name ?? "사용자"는 name이 null이면 "사용자"를 반환합니다. ● 이 방식은 긴 i.. 2025. 4. 3.
StringBuilder로 문자열 성능 향상시키기 StringBuilder로 문자열 성능 향상시키기  문자열을 반복적으로 연결할 때 + 연산자를 사용하는 대신,  StringBuilder를 사용하면 성능이 크게 향상됩니다. 특히 루프 안에서 문자열을 누적할 경우 StringBuilder는 메모리 낭비를 방지해 줍니다. using System; using System.Text; class Program {     static void Main()     {         StringBuilder sb = new StringBuilder();         for (int i = 1; i         {             sb.Append("Line ");             sb.Append(i);             sb.AppendLine().. 2025. 4. 2.
switch 표현식으로 간결하게 조건 분기하기 switch 표현식으로 간결하게 조건 분기하기C# 8.0부터는 기존의 switch 문보다 간단하고 표현력 있는  switch 표현식을 사용할 수 있습니다. 코드를 더 간결하게 만들고 가독성을 높이는 데 효과적 using System; class Program {     static void Main()     {         string role = "admin";         string permission = role switch         {             "admin" => "모든 권한",             "user" => "읽기/쓰기",             "guest" => "읽기 전용",             _ => "권한 없음"         };         Co.. 2025. 4. 1.
async void는 이벤트 핸들러에만 사용 async void는 이벤트 핸들러에만 사용 C#에서 async void 메서드는 예외 처리가 어렵고  비동기 흐름을 제어하기 힘들기 때문에  이벤트 핸들러에서만 사용해야 합니다. 그 외 상황에서는 반드시 Task 또는 Task를 반환해야 합니다. using System; using Systehttp://m.Threading.Tasks;class Program {     static async Task Main()     {         try         {             await DoSomethingAsync();         }         catch (Exception ex)         {             Console.WriteLine($"예외 처리됨: {ex.Messa.. 2025. 3. 31.
readonly struct로 값 타입 최적화하기 readonly struct로 값 타입 최적화하기  C#의 readonly struct는 값 타입(Struct)의 불변성을 보장하고  성능 최적화에 큰 도움이 되는 기능입니다. 값 타입은 주로 작은 데이터 덩어리를 표현할 때 사용되며,  readonly를 붙이면 의도치 않은 변경을 방지할 수 있습니다. 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 Distance => Math.Sqrt(X * X + Y * Y); } .. 2025. 3. 26.
인터페이스와 추상클래스 namespace Property2{ //.Net 9.0    internal class Program { abstract class Product { private static int serial = 0; public string SerialID { get {return String.Format("{0:d5}", serial++);} }  abstract public DateTime ProductDate { get;set; } }   class MyProduct : Product { public override DateTime ProductDate { get;set; } }   record RTransaction { public string From { get; set; } public string T.. 2025. 2. 14.
프로퍼티 1 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml.Linq; namespace Property{         internal class Program    {        /*        class BirthdayInfo        {            private string name;            private DateTime birthday;             public string Name            {                get { return name; }              .. 2025. 1. 30.
추상클래스 추상클래스 using @interface;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks; namespace @interface{    interface IRunnable    {        void Run();    }     interface IFlyable    {        void Fly();    }     class FlyingCar : IRunnable, IFlyable    {        public void Run()        {            Console.WriteLine("Run! Run!".. 2024. 12. 12.
클래스 c# 클래스using System.Drawing;using System.Net.Http.Headers;using System.Timers;using System.Collections.Generic;using System.Security.Cryptography.X509Certificates;using System.Runtime.CompilerServices; namespace _07_Class{          readonly struct RGBColor    {        public readonly byte R;        public readonly byte G;        public readonly byte B;         public RGBColor(byte r, byte g, byt.. 2024. 12. 3.
메소드 ( Method) 메소드 ( Method)    using System.Net.Http.Headers;using System.Security.Cryptography; namespace _06_Method{    internal class Program    {        static int Fibonacci(int n)        {            if (n  0)                    Console.WriteLine(", ");                 Console.Write(args[i]);                sum += args[i];            }            Console.WriteLine();             return sum;        }     .. 2024. 8. 16.
코드의 흐림제어 using System.Collections.Generic; namespace _05_Code{    //형식패턴 클래스 선언    class Preschooler { }    class Underage { }    class Adult { }    class Senior { }     internal class Program    {         #region 형식 패턴         static int CalculateFee(object visitor)        {            return visitor switch            {                Underage => 100,                Adult => 500,                Senior .. 2024. 8. 1.