3. 비동기 프로그래밍:
   C#에서는 `async` 및 `await` 키워드를 사용하여 비동기 프로그래밍을 지원합니다. 이를

 활용하면 오래 걸리는 작업을 비차단적으로 처리하고, 동시성을 활용하여 애플리케이션의 성능을 향상시킬 수 있습니다.

   using System;
   using System.Net.Http;
   using System.Threading.Tasks;

   class Program
   {
       static async Task Main(string[] args)
       {
           await DownloadDataAsync();

           Console.WriteLine("데이터 다운로드 완료");
           Console.ReadLine();
       }

       static async Task DownloadDataAsync()
       {
           using (HttpClient client = new HttpClient())
           {
               string data = await client.GetStringAsync("https://www.example.com");

               Console.WriteLine("데이터 다운로드 중...");
               Console.WriteLine("다운로드된 데이터 길이: " + data.Length);
           }
       }
   }



   이 예제에서는 `HttpClient`를 사용하여 비동기적으로 데이터를 다운로드합니다. `DownloadDataAsync` 메서드는 `async` 키워드로 정의되어 있으며, `await` 키워드를 사용하여 비동기 작업이 완료될 때까지 기다립니다. `Main` 메서드에서는 `DownloadDataAsync` 메서드를 호출하고, 데이터 다운로드가 완료된 후 "데이터 다운로드 완료"라는 메시지를 출력합니다.

이러한 기법과 패턴은 C# 언어를 더욱 효과적으로 사용하고 재미있게 개발할 수 있도록 도와줍니다. 이 외에도 다양한 기법과 패턴이 존재하며, C# 언어와 .NET 프레임워크의 기능을 탐구하면서 더 많은 재미있는 프로그램을 개발해보시기 바랍니다!

2. 이벤트와 이벤트 핸들러 활용:
   C#에서 이벤트를 활용하여 객체 간의 상호 작용을 구현할 수 있습니다. 이벤트는 발생한 동작에 대한 알림을 다른 객체에게 전달하는 역할을 합니다.

   using System;

   class Program
   {
       static void Main(string[] args)
       {
           Button button = new Button();
           button.Clicked += Button_Clicked;

           Console.WriteLine("버튼을 클릭하세요.");
           Console.ReadLine();
       }

       static void Button_Clicked(object sender, EventArgs e)
       {
           Console.WriteLine("버튼이 클릭되었습니다.");
       }
   }

   class Button
   {
       public event EventHandler Clicked;

       public void OnClick()
       {
           Clicked?.Invoke(this, EventArgs.Empty);
       }
   }

   이 예제에서는 `Button` 클래스가 `Clicked` 이벤트를 선언하고, `OnClick` 메서드를 통해 이벤트를 발생시킵니다. `Main` 메서드에서는 `Button` 객체를 생성하고 `Clicked` 이벤트에 대한 핸들러를 등록합니다. 버튼을 클릭하면 `Button_Clicked` 메서드가 호출되어 "버튼이 클릭되었습니다."라는 메시지를 출력합니다.

여기 몇 가지 C# 언어에서 신기하거나 재미있는 기법 및 패턴을 소개해 드리겠습니다:

1. LINQ (Language Integrated Query) 활용:
   LINQ는 C#에서 제공하는 쿼리 기능으로, 데이터 소스에서 데이터를 쉽게 쿼리하고 조작할 수 있습니다. 예를 들어, 배열이나 리스트와 같은 컬렉션에서 특정한 조건에 맞는 항목을 검색하거나 정렬할 때 LINQ를 사용할 수 있습니다.


   using System;
   using System.Linq;

   class Program
   {
       static void Main(string[] args)
       {
           int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

           // 짝수인 숫자만 필터링하여 새로운 배열 생성
           var evenNumbers = numbers.Where(n => n % 2 == 0).ToArray();

           // 숫자들을 제곱하여 새로운 배열 생성
           var squaredNumbers = numbers.Select(n => n * n).ToArray();

           // 숫자들의 합 계산
           var sum = numbers.Sum();

           Console.WriteLine("짝수 숫자: " + string.Join(", ", evenNumbers));
           Console.WriteLine("제곱된 숫자: " + string.Join(", ", squaredNumbers));
           Console.WriteLine("숫자의 합: " + sum);

           Console.ReadLine();
       }
   }




4. 텍스트 기반 간단한 RPG 게임:
   사용자가 텍스트로 입력한 명령에 따라 일련의 이벤트가 발생하는 간단한 RPG 게임입니다.

   using System;

   class Program
   {
       static void Main(string[] args)
       {
           string playerName;

          

 Console.WriteLine("텍스트 기반 간단한 RPG 게임에 오신 것을 환영합니다!");
           Console.Write("플레이어 이름을 입력하세요: ");
           playerName = Console.ReadLine();

           Console.WriteLine();
           Console.WriteLine("플레이어 {0}이(가) 마을에 도착했습니다.", playerName);
           Console.WriteLine("마을 주민들과 대화하거나 모험을 떠날 수 있습니다.");
           Console.WriteLine("어떤 일을 하시겠습니까?");
           Console.WriteLine("1. 주민과 대화하기");
           Console.WriteLine("2. 모험 떠나기");
           Console.WriteLine("3. 게임 종료");

           int choice = Convert.ToInt32(Console.ReadLine());

           switch (choice)
           {
               case 1:
                   Console.WriteLine("주민과 대화합니다...");
                   // 주민과의 대화 이벤트 처리
                   break;
               case 2:
                   Console.WriteLine("모험을 떠납니다...");
                   // 모험 이벤트 처리
                   break;
               case 3:
                   Console.WriteLine("게임을 종료합니다.");
                   Environment.Exit(0);
                   break;
               default:
                   Console.WriteLine("잘못된 선택입니다.");
                   break;
           }

           Console.ReadLine();
       }
   }


3. 로또 번호 생성기:
   로또 번호 생성기는 1부터 45 사이의 숫자 중 6개를 임의로 선택하여 출력하는 프로그램입니다.

   using System;

   class Program
   {
       static void Main(string[] args)
       {
           Console.WriteLine("로또 번호 생성기");
           Console.WriteLine();

           Random random = new Random();

           for (int i = 1; i <= 6; i++)
           {
               int number = random.Next(1, 46);
               Console.WriteLine("로또 번호 {0}: {1}", i, number);
           }

           Console.ReadLine();
       }
   }



2. 문자열 거꾸로 출력하기:
   사용자로부터 입력받은 문자열을 거꾸로 출력하는 프로그램입니다.

   using System;

   class Program
   {
       static void Main(string[] args)
       {
           Console.Write("문자열을 입력하세요: ");
           string input = Console.ReadLine();

           char[] charArray = input.ToCharArray();
           Array.Reverse(charArray);
           string reversedString = new string(charArray);

           Console.WriteLine("거꾸로 출력된 문자열: " + reversedString);

           Console.ReadLine();
       }
   }

 

1. 숫자 맞추기 게임:
   사용자가 프로그램이 생각한 숫자를 맞추는 게임입니다. 프로그램은 1부터 100 사이의 임의의 숫자를 선택하고, 사용자는 숫자를 입력하여 맞추는 방식입니다. 프로그램은 사용자가 추측한 숫자가 정답보다 큰지 작은지를 알려줍니다. 사용자가 정답을 맞출 때까지 계속해서 입력을 받습니다.

   using System;

   class Program
   {
       static void Main(string[] args)
       {
           Random random = new Random();
           int targetNumber = random.Next(1, 101);
           int guess = 0;

           Console.WriteLine("1부터 100 사이의 숫자를 맞춰보세요!");

           while (guess != targetNumber)
           {
               Console.Write("추측한 숫자를 입력하세요: ");
               guess = Convert.ToInt32(Console.ReadLine());

               if (guess < targetNumber)
                   Console.WriteLine("숫자가 작습니다. 다시 시도하세요.");
               else if (guess > targetNumber)
                   Console.WriteLine("숫자가 큽니다. 다시 시도하세요.");
               else
                   Console.WriteLine("정답입니다! 축하합니다!");
           }

           Console.ReadLine();
       }
   }

 

+ Recent posts