본문 바로가기
반응형

프로그래밍493

C# 재귀 호출 동작 방식 재귀 호출에 대해 재귀(recursion) 함수란 자신을 호출하는 함수를 말하는데, while이나 for와 같은 순환처럼 재귀 함수도 하나씩 작은 부분을 처리한 결과를 결합해 하나의 복잡한 문제를 해결해 나가는 방법이다. 하지만 for나 while은 작업이 끝날 때까지 반복을 계속하는 반면, 재귀호출은 작업 자체를 잘게 쪼개서 처리한 결과를 결합하는 방법으로 더 큰 문제를 해결한다는 차이가 있다. 반복에 비해 재귀가 더 짧게 구현 가능한 경우가 많기 때문에 함수형 접근 방식에 적합하지만, 설계와 테스트는 더 어려운 편이다. 재귀 호출로 코드를 더 짧게 구현 가능 설계와 테스트 난이도가 올라감 using System; public partial class Program { static void Main(s.. 2024. 3. 29.
C# LINQ - Enumerable.TakeWhile Enumerable.TakeWhile(IEnumerable, Func) 메서드 public static System.Collections.Generic.IEnumerable TakeWhile (this System.Collections.Generic.IEnumerable source, Func predicate); 매개변수 source IEnumerable 요소가 반환되는 시퀀스 predicate Func 각 소스 요소를 조건에 대해 테스트할 함수 반환 IEnumerable 테스트를 통과한 요소들의 시퀀스를 반환한다. 예제 코드 string[] fruits = { "apple", "banana", "mango", "orange", "passionfruit", "grape" }; IEnumerable qu.. 2024. 3. 28.
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.
도커 파일(Dockerfile) 자주 쓰이는 명령어 정리 Dockerfile 포맷 하나의 도커 파일은 기본적으로 다음과 같은 구조를 가진 여러 개의 명령문으로 구성되어 있다. # 주석(Comment) 명령어(INSTRUCTION) 인자(Argument) 각 명령문은 명령어로 시작하고 여러 개의 인자가 따라올 수 있으며, 해당 명령문에 대한 주석도 달 수 있다. 인자와 구분이 쉽도록 명령어는 모두 영어 대문자로 써주는 것이 관례이다. FROM 명령문 FROM FROM : 하나의 Docker 이미지는 base 이미지부터 시작해서 기존 이미지 위에 새로운 이미지를 중첩해서 여러 단계의 이미지 층(layer)을 쌓아가며 만들어진다. FROM 명령문은 이 base 이미지를 지정해 주기 위해서 사용되는데, 보통 Dockerfile 내에서 최상위단에 위치한다. base 이.. 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.