프로그래밍/C#

    [C#] Fluent vs Query (LINQ Fluent vs Query Syntax)

    [C#] Fluent vs Query (LINQ Fluent vs Query Syntax)

    1. 핵심 정리 using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { string[] arr = {"kim", "shin", "lee", "park", "choi"}; // Fluent Syntax var e = arr.Where(s => s.Contains("i")) .OrderBy(s => s.Length) .Select(s => s.ToUpper()); foreach(var n in e) Console.WriteLine(n); } } 문자열이 5개 들어있는 배열이 있다. 해당 배열에서 LINQ를 이용해서 필터링 후 요소를 꺼내보려고 한다. 먼저 Where을 통해 문자열..

    [C#] LINQ 원리

    [C#] LINQ 원리

    1. 핵심 정리 using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { int[] arr = {1, 2, 3, 4, 5}; IEnumerable e = arr.Select(n => n * 10); arr[0] = 0; foreach(int n in e) Console.WriteLine(n); } } 1부터 5까지 5개의 요소가 들어있는 배열이 있다. 그리고 query method를 이용하여 요소마다 * 10을 한 값을 출력하려고 한다. 이 때, 배열의 0번째 요소에 0을 넣고 출력한다면 결과가 어떻게 나올까? 어차피 열거자로 뽑은 이후에 0을 넣은것이니 그대로 10, 20, ..

    [C#] LINQ 개념 (Language INtegrated Query)

    [C#] LINQ 개념 (Language INtegrated Query)

    1. 사전 복습 using System; using System.Collections.Generic; class Program { static void Main() { int[] arr = {1, 2, 3, 4, 5}; foreach(int n in arr) Console.WriteLine(n) IEnumerable col = arr; foreach(int n in col) Console.WriteLine(n); } } 배열을 하나 만들고 foreach를 이용해 요소를 출력해보는 코드이다. 그런데 foreach의 원리는 결국 배열이 갖고있는 GetEnumerator() 메소드를 호출해 열거자를 꺼내는 방식이였다. 모든 컬렉션은 IEnumerable 인터페이스를 구현해야 하고 배열도 컬렉션이므로 GetEn..

    [C#] 코루틴 (COROUTINE) (3)

    [C#] 코루틴 (COROUTINE) (3)

    1. 코루틴 예제 using System; using System.Collections; using System.Collections.Generic; class Program { // SUBROUTINE public static int Foo() { Console.WriteLine("1"); return 10; Console.WriteLine("2"); return 20; Console.WriteLine("3"); return 30; Console.WriteLine("4"); return 40; Console.WriteLine("5"); return 50; } static void Main() { int n1 = Foo(); int n2 = Foo(); Console.WriteLine($"{n1}, {n..

    [C#] 코루틴 (COROUTINE) (2)

    [C#] 코루틴 (COROUTINE) (2)

    1. 핵심 정리 using System; using System.Collections; using System.Collections.Generic; class Node { public int data; public Node next; public Node(int d, Node n) { data = d; next = n; } } // 열거자 class IntLinkedListEnumerator : IEnumerator { public Node head = null; public Node current = null; public IntLinkedListEnumerator(Node n) { head = n; } public object Current => current.data; public bool Move..

    [C#] 코루틴 (COROUTINE) (1)

    [C#] 코루틴 (COROUTINE) (1)

    1. 코루틴(COROUTINE) 이란? 위 그림은 일반적인 메소드의 동작을 그림으로 표현한 것이다. 메소드를 호출하면 해당 메소드의 동작을 처리하고 다시 메소드를 호출한 부분으로 돌아간다. 일반적인 메소드라면 위와 같이 동작하는게 일반적인 원칙이다. 그리고 이렇게 동작하는 Foo를 예전에 Sub-Routine이라고 부른적이 있다. 그렇다면 코루틴은 어떤식으로 동작을 할까? Co-Routine은 위와 같이 동작한다. 메소드를 호출하게 되면 메소드의 내용을 전부 실행하는게 아닌 일부만을 실행하고 다시 메소드를 호출한 부분으로 돌아온다. 또 코드가 실행되던 중 Foo( ); 를 만나게 되면 이번엔 Foo( ) 메소드의 처음 부분이 아닌 이전에 끊겼던 부분부터 이어서 실행을 하게 된다. 한번에 Foo( )의 모..