본문 바로가기
반응형

프로그래밍/C#116

C# yield 이해하기 C# yield 이해하기 yield는 iterator를 포함하는 메서드에서 사용되는 강력한 키워드이다. yield를 사용하면 enumerable 배열을 간단하게 반환할 수 있다. 하나의 요소를 해당 시점에서 반환하기 때문에 기존의 전통적인 반환 방법과는 다르다. 지연 평가(lazy evaluation) 성능 향상(increased perforamance) 대량의 데이터, 복잡한 데이터 구조를 다루는데 효과적 iteration 간의 상태 지속이 가능 기본 구문 public IEnumerable GetNumbers() { for (int i = 0; i < 10; i++) { yield return i; } } 위의 예에서, GetNumbers()는 0에서 9까지의 정수 시퀀스를 생성한다. yield ret.. 2024. 2. 14.
C# 지연 평가(lazy evaluation)에 대해서 지연 평가란 무엇인가? 컬렉션의 단일 요소가 미리 계산되지 않고 호출되는 시점에서 평가가 이루어지고 실행된다. 즉, 호출시점까지 평가가 지연된다. 즉시 평가(eager evaluation) 즉시 평가를 사용하는 경우 모든 값들이 평가되어야지만 수행이 가능하다. 그래서 while(true)로 선언된 경우 끝에 도달하지 못하고 메모리 부족으로 예외가 발생한다. 지연 평가(lazy evaluation) 지연 평가를 사용하는 경우 while(true)로 선언되어 있다 하더라도 모든 값들을 미리 평가하고 시작하지 않는다. 호출되는 시점에서 필요한 부분까지만 평가하기 때문에 Take(10)에 해당하는 부분까지 지연평가되고 정상적으로 프로그램이 실행된다. 예제 코드 using System.Collections.Gen.. 2024. 2. 13.
C# Virtual vs Abstract Virtual vs Abstract 사용자가 선택 가능한 교통수단에 대한 클래스를 작성해 보자. 교통수단으로는 Car, Train, Plane 등이 있을 것이다. 이를 바탕으로 여행시간과 운임을 선택 가능하도록 작성해 보자. 예를 들어, 유저의 선택을 기반으로 적절한 교통수단으로 인스턴스화되는 TransportAgency 클래스를 작성해 보자. public enum TransportModeType { Car, Plane, Train } internal class TransportAgency { public TransportMode CreateTransportMode(TransportModeType modeType) { return modeType switch { TransportModeType.Car =.. 2024. 2. 3.
C# 변수 캡처(Capture)에 대해서 람다 변수 캡처(Capture) 람다를 다루다 보면 변수를 캡처하는 상황을 맞이하게 될 것이다. using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List actions = new List(); for (int i = 0; i Console.WriteLine(i)); } foreach (var a in actions) { a.Invoke(); } // 기대하던 출력: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 // 실제 출력: 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 } } 위의 코드를 작.. 2024. 1. 23.
C# 볼링 점수 계산기(Bowling Score Calculator) 볼링 점수 계산 생각보다 볼링 점수 계산기를 코드로 짜보려니 예상치 못한 문제들이 많았다. 스트라이크 이후에 공 2개의 점수를 보너스로 받는다. 스페어 이후에 공 1개의 점수를 보너스로 받는다. 10 프레임에서 달성한 스트라이크, 스페어에 대해서는 보너스를 받지 못한다. 10 프레임에서 스트라이크, 스페어를 달성하면 1번 더 공을 던질 수 있다. 볼링 점수 계산 사이트 Bowling Score Calculator THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PA.. 2024. 1. 19.
C# 문자열 정렬하기 문자열 정렬하기 알고리즘을 풀 거나한 몇몇 상황에서 문자열 정렬이 필요한데, 알아두면 유용하게 사용이 가능하다. 최근 알고리즘 문제에서 문자열 정렬만 하면 되는데 갑자기 버블 정렬을 하고 있는 나를 발견할 수 있었다. 우선 문자열을 정렬하기 위해서는 각각의 문자로 분리하여야 한다. char의 배열로 변환한 후에 정렬해준다. public static class StringExtensions { public static string Sort(this String input) { char[] chars = input.ToCharArray(); Array.Sort(chars); return new string(chars); } public static string SortDesc(this String input.. 2024. 1. 15.