CSharp26 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. params 키워드로 가변 인자 받기 params 키워드로 가변 인자 받기 C#의 params 키워드를 사용하면 메서드에 개수 제한 없이 인자를 전달할 수 있습니다. 이 기능은 유연한 API를 만들 때 매우 유용합니다. using System; class Program { static void Main() { PrintNumbers(1, 2, 3); PrintNumbers(10, 20); PrintNumbers(); // 인자 없이도 호출 가능 } static void PrintNumbers(params int[] numbers) { Console.WriteLine("숫자 목록: " + string.Join(", ", numbers)); }.. 2025. 3. 28. try-catch-finally 구문으로 예외 처리 마스터하기 try-catch-finally 구문으로 예외 처리 마스터하기 try-catch-finally 구문으로 예외 처리 마스터하기 C#에서 예외(Exception)는 프로그램 실행 중 발생하는 문제를 처리하기 위한 핵심 메커니즘입니다. try-catch-finally 구문을 사용하면 오류를 우아하게 처리하고 자원 정리를 할 수 있습니다. using System; class Program { static void Main() { try { Console.Write("숫자를 입력하세요: "); int number = int.Parse(Console.ReadLine()); Console.WriteLine.. 2025. 3. 27. 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. nameof 연산자 사용하기 nameof 연산자 사용하기 nameof는 변수, 속성, 메서드, 클래스 등의 이름을 문자열로 안전하게 가져올 수 있는 기능입니다. 코드 리팩토링 시에도 안전하게 작동하므로 유지보수성과 안정성이 향상됩니다. using System; class Person { public string Name { get; set; } public void PrintPropertyName() { Console.WriteLine(nameof(Name)); // "Name" 출력 } } class Program { static void Main() { var person = new Person(); person.PrintProperty.. 2025. 3. 25. 확장 메서드(Extension Methods) 사용 확장 메서드(Extension Methods) 사용 확장 메서드는 기존 클래스에 새로운 메서드를 상속 없이 추가할 수 있는 강력한 기능입니다. 코드를 더 간결하고 읽기 쉽게 만들어주며, LINQ와 같은 라이브러리에서도 널리 사용 using System; public static class StringExtensions { // 문자열의 첫 글자를 대문자로 바꾸는 확장 메서드 public static string CapitalizeFirst(this string input) { if (string.IsNullOrEmpty(input)) return input; return char.ToUpper(input[0]) + input.Substring(1);.. 2025. 3. 24. 인터페이스와 추상클래스 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. C# 문법 C# 문법 global using System; using System.Globalization; using static System.Console; namespace Hello { class MainApp { //enum DialogResult { YES, NO, CANCEL, CONFIRM, OK }; enum DialogResult { YES = 10, NO, CANCEL, CONFORM = 50, OK }; static void Main(string[] args) { //1번 테스트 /* if (args.Length == 0) { Console.WriteLine("사용법 : Hello.exe "); return; } WriteLine("Hello, {0}!", args[0]); */ //2번 테.. 2024. 7. 1. 프로젝트 이름 변경 프로젝트 이름 변경 1. 솔루션 탐색기 - 프로젝트 우 클릭 - 이름 바꾸기 - 이름 변경 * WindowsFormsApp1 --> testName 2. 솔루션 탐색기 - 프로젝트 우 클릭 - 속성 3. 어셈블리 이름과 기본 네임스페이스 변경 * WindowsFormsApp1 --> testName 4. Ctrl + Shift + h 를 눌러 찾기 및 바꾸기 창을 띄움 5. 기타 옵션을 아래와 동일하게 맞추고 이름 변경 후 모두 바꾸기 클릭 * 상단에 변경 전(WindowsFormsApp1) 하단에 변경 후 (testName) 입력 6. 솔루션 탐색기 - 솔루션 우 클릭 - 이름 바꾸기 - 이름 변경 * WindowsFormsApp1 --> testName 프로젝트 폴더 이름 변경 프로젝트 폴더의 경.. 2024. 4. 20. C# 이란? C# 이란? C#은 세련되고 형식이 안전한 개체 지향 언어 개발자는 C#을 사용하면 .NET 에코시스템에서 실행되는 다양한 형식의 안전하고 강력한 애플리케이션을 빌드할 수 있습니다. C# 구문은 다양한 표현이 가능하면서도 간편하고 쉽게 배울 수 있습니다. C#의 중괄호 구문은 C, C++, Java 또는 JavaScript에 익숙한 사용자라면 누구나 바로 알아볼 수 있습니다. 이러한 언어에 익숙한 개발자는 일반적으로 짧은 시간 내에 C#으로 생산적인 작업을 수행할 수 있습니다. C#은 nullable 형식, 대리자, 람다 식, 패턴 일치 및 안전한 직접 메모리 액세스와 같은 강력한 기능을 제공합니다. C#은 향상된 형식 안전성과 성능을 제공하는 제네릭 메서드 및 형식을 지원합니다. C#은 컬렉션 클래스의.. 2022. 10. 5. 이전 1 2 다음