본문 바로가기
반응형

프로그래밍/C#116

C# 재귀 호출 동작 방식 재귀 호출에 대해 재귀(recursion) 함수란 자신을 호출하는 함수를 말하는데, while이나 for와 같은 순환처럼 재귀 함수도 하나씩 작은 부분을 처리한 결과를 결합해 하나의 복잡한 문제를 해결해 나가는 방법이다. 하지만 for나 while은 작업이 끝날 때까지 반복을 계속하는 반면, 재귀호출은 작업 자체를 잘게 쪼개서 처리한 결과를 결합하는 방법으로 더 큰 문제를 해결한다는 차이가 있다. 반복에 비해 재귀가 더 짧게 구현 가능한 경우가 많기 때문에 함수형 접근 방식에 적합하지만, 설계와 테스트는 더 어려운 편이다. 재귀 호출로 코드를 더 짧게 구현 가능 설계와 테스트 난이도가 올라감 using System; public partial class Program { static void Main(s.. 2024. 3. 29.
C# string에서 16진수로 변환하기 string에서 16진수로 변환하기 string에서 16진수로 변환하기 위해서는 우선 각각의 string을 한글자씩 char 요소로 분해해서 이를 바이트로 출력하면 된다. 이때 바이트로 변환되는 값은 10진수이다. public static byte[] ConvertToByte(string str) { byte[] bytes = new byte[str.Length]; int i = 0; foreach (char c in str) { bytes[i++] = Convert.ToByte(c); } return bytes; } 전체 예제 코드 using System; public partial class Program { static void Main(string[] args) { int i = 0; string.. 2024. 3. 28.
식 트리와 람다식 식 트리(expression tree) 람다를 이용하면 식의 요소들을 트리로 표현하는 데이터 구조인 식 트리(expression tree)를 만드는 것도 가능하다. 식 트리를 이용하면, 트리를 따라가며 해석하거나 특정 노드를 수정해서 코드에 변화를 줄 수 있다. 컴파일러 측면에서는 식 트리를 추상 구문 트리(abstract syntax tree, AST)라고 부른다. 대리자에 람다식을 할당하는 코드를 살펴보자. private static Func AreaREctangleDelegate = (a, b) => a * b; 이 문은 다음 세 구역으로 나눈다. 대리자 변수 선언 : Func AreaRectangleDelegate 대입(할당) 연산자 : = 람다식 : (a, b) => a* b 이제 이 문을 데이.. 2024. 3. 27.
C# 공변성(Covariance)이란 무엇인가? 공변성 공변성은 대리자에서 정의하고 있는 반환 형식보다 하위의 상속 형식(서브 형식, 더 많이 상속된 형식) 반환을 허용한다. Covariance 프로젝트에서 대리자의 공변성 예제를 살펴보자. public partial class Program { private delegate TextWriter CovarianceDelegate(); } 이 대리자는 TextWriter 형식을 반환한다. 다음으로 StreamWriterMethod()를 만들 텐데, 이 메서드는 StreamWriter 개체를 반환한다. public partial class Program { private static StreamWriter StreamWriterMethod() { DirectoryInfo[] arrDirs = new Dir.. 2024. 3. 26.
C# 제네릭 대리자(Generic Delegate) C# 제네릭 대리자(Generic Delegate)란? 대리자 형식은 제네릭(generic) 형식을 매개 변수로 이용할 수 있다. 제네릭을 지원하면, 대리자를 변수로 초기화할 때까지 대리자에 사용할 매개 변수나 반환 형식을 지정을 미룰 수 있다. 즉, 대리자 형식을 정의할 때는 대리자의 매개 변수와 반환 형식을 명시하지 않는다. 다음 코드를 이용해서 좀 더 자세히 알아보자. public partial class Program { private delegate T FormulaDelegate(T a, T b); } using System; public partial class Program { private delegate T FormulaDelegate(T a, T b); private static in.. 2024. 3. 26.
C# list 랜덤(random) 하게 섞기 C#에서 Linq로 랜덤 하게 섞기 list의 요소들을 랜덤 하게 섞고 싶을 때 Linq OrderBy()에서 random 객체의 Next()를 호출하면 간단하게 해당 요소들을 섞을 수 있다. using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { var list = new List() { 1, 2, 3, 4, 5 }; var random = new Random(); var randomized = list.OrderBy(x => random.Next()); foreach (var i in randomized) { Console.WriteLine(i); .. 2024. 3. 21.