Section 28.4: 다양한 스타일의 반복문들

while

가장 흔하게 사용되는 형태의 반복문이다. 이 이 방식의 한가지 단점은 반복문 수행이 얼마나 진행되고 있는지에 대해 확인할 수 있는 정보가 기본적으로 제공되지 않는다는 것이다.

/// condition 으로 표현된 조건이 만족되는 동안 반복문이 계속하여 수행된다 while(condition) { /// 반복 작업을 수행한다 }

do

while 문과 유사하나, 조건문 만족 여부 확인을 반복문의 시작 지점이 아닌 끝 지점에서 수행한다는 차이점이 있다. 이로 인해 반복문에 기술된 동작이 최소 한번은 무조건 실행되는 특징을 가지고 있다.

do { /// 반복 작업을 수행한다 } while(condition) /// condition 으로 표현된 조건이 만족되는 동안 반복문이 계속하여 수행된다

for

또하나의 흔히 사용되는 형태의 반복문이다. 반복문 수행시마다 인덱스 값 (이 예제에서는 i) 이 증가하며 해당 값을 활용할 수 있다. 주로 배열을 다루기 위해 사용된다.

for ( int i = 0; i < array.Count; i++ ) { var currentItem = array[i]; /// "currentItem" 을 이용해 작업을 수행한다 }

foreach

IEnumarable 객체를 요소 반복하는 보다 세련된 방법이다. 현재 객체의 인덱스 값이나 리스트의 전체 갯수 등을 전혀 신경쓰지 않아도 된다는 장점이 있다.

foreach ( var item in someList ) { /// "item" 에 대하여 원하는 작업을 수행한다 }

ForEach 메소드

다른 반복문 스타일들은 주로 컬렉션에서 특정 요소를 선택하거나 갱신하기 위해 사용된다면, 이 스타일은 주로 컬렉션의 모든 요소들을 대상으로 특정 메소드를 바로 불러주기 위해 사용된다.

list.ForEach(item => item.DoSomething()); // 혹은 list.ForEach(item => DoSomething(item)); // 혹은 method group 을 호출한다 list.ForEach(Console.WriteLine); // 배열에 대해 사용하기 Array.ForEach(myArray, Console.WriteLine);

기억해야 할 중요한 점은 이 메소드는 List<T> 인스턴스들과 배열에 대한 정적 메소드 (static method) 로만 제공된다는 것이다 - 이는 LINQ 의 일부분이 아니다.

LINQ 병렬 (Parallel) Foreach

LINQ 버전의 ForEach 라고 볼 수 있으나, 한가지 차이점은 이는 원하는 반복 작업을 병렬적으로 수행한다는 점이다. 이것이 의미하는 바는 컬렉션 내의 모든 요소들에 대한 작업 수행이 동시에 일제히 일어난다는 것이다.

collection.AsParallel().ForAll(item => item.DoSomething()); /// 혹은 collection.AsParallel().ForAll(item => DoSomething(item));
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

'번역 > C# Notes for Professionals' 카테고리의 다른 글

28.6: 반복문에서의 continue 사용  (0) 2021.09.16
28.5: 중첩 (nested) 반복문  (0) 2021.09.15
28.3: Foreach 반복문  (0) 2021.09.08
28.2: Do - While 반복문  (0) 2021.09.03
28.1: For 반복문  (0) 2021.08.27

Section 28.3: Foreach 반복문

foreachIEnumerable (IEnumerable<T> 역시 이를 상속받음에 유의한다) 을 구현 (implement) 하는 class 인스턴스 내의 일련의 값들에 대한 요소 반복을 수행할 때 사용한다. 이러한 요소 반복 가능한 대상의 예로써는 List<T>, T[] (동일 타입으로 이루어진 배열), Dictionary<TKey, TSource>, 와 같은 기본 제공 객체들 뿐만 아니라 IQueryableICollection 인터페이스들이 모두 포함된다.

문법

foreach(ItemType itemVariable in enumerableObject) statement;

추가 설명

  1. 위 문법에서 ItemType 으로 표현된 타입은 각 요소들의 타입과 정확히 일치할 필요는 없으며, 해당 요소가 할당될 수 있는 (assignable) 타입이기만 하면 무방하다.
  2. ItemType 에 실제 특정 타입을 지정하는 대신에, var 를 기술하면 enumerableObjectIEnumerable 구현 시의 generic 인자를 검사하여 적절한 요소 타입을 자동으로 추론하도록 설정할 수 있다.
  3. statement 부분은 코드 블록이나 단일 문 (statement), 심지어는 비어있는 문 (;) 도 될 수 있다
  4. 만약 enumerableObjectIEnumerable 을 구현 (implement) 하고 있지 않다면, 해당 코드는 컴파일이 되지 않을 것이다.
  5. 매 반복 수행시마다 현재의 요소값이 ItemType (명시적으로 지정되지 않고 컴파일러에 의해 추론되도록 var 가 사용되었다 하더라도) 으로 타입 변환 (cast) 되며 이러한 변환이 불가능할 경우 InvalidCastException 예외가 발생할 것이다.

아래 예제를 확인한다:

var list = new List < string > (); list.Add("Ion"); list.Add("Andrei"); foreach(var name in list) { Console.WriteLine("Hello " + name); }

위 예제는 아래 코드와 동일하다:

var list = new List < string > (); list.Add("Ion"); list.Add("Andrei"); IEnumerator enumerator; try { enumerator = list.GetEnumerator(); while (enumerator.MoveNext()) { string name = (string) enumerator.Current; Console.WriteLine("Hello " + name); } } finally { if (enumerator != null) enumerator.Dispose(); }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

'번역 > C# Notes for Professionals' 카테고리의 다른 글

28.5: 중첩 (nested) 반복문  (0) 2021.09.15
28.4: 다양한 스타일의 반복문들  (0) 2021.09.15
28.2: Do - While 반복문  (0) 2021.09.03
28.1: For 반복문  (0) 2021.08.27
27.8: Queue<T>  (0) 2021.08.27

Section 28.2: Do - While 반복문

이는 while 반복문과 유사하나, 반복 수행될 코드 영역을 먼저 수행한 뒤 조건문을 확인한다는 차이점이 있다. 따라서 Do - While 반복문은 조건문의 참 / 거짓 여부와 상관 없이 반복 수행될 코드 영역을 적어도 한번은 실행하게 된다.

int[] numbers = new int[] { 6, 7, 8, 10 }; // 순차적으로 더한 합이 10 이 넘거나 배열의 모든 값이 처리 완료될때까지 // 배열 내 값들을 하나씩 꺼내 더한다. int sum = 0; int i = 0; do { sum += numbers[i]; i++; } while (sum <= 10 && i < numbers.Length); System.Console.WriteLine(sum); // 13
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

'번역 > C# Notes for Professionals' 카테고리의 다른 글

28.4: 다양한 스타일의 반복문들  (0) 2021.09.15
28.3: Foreach 반복문  (0) 2021.09.08
28.1: For 반복문  (0) 2021.08.27
27.8: Queue<T>  (0) 2021.08.27
27.7: LinkedList<T>  (0) 2021.08.25

Section 28.1: For 반복문

For 반복문은 특정 작업을 일정 횟수만큼 수행시킬 때 유용하다. 이는 While 반복문과 유사하나 아래에서 설명할 Increment 영역이 Condition 영역과 함께 존재한다는 점에서 차이가 있다.

For 반복문은 다음과 같이 구성된다:

for (Initialization; Condition; Increment) { // 반복 수행될 코드 }
  • Initialization - 반복문 내에서만 사용될 새로운 로컬 변수를 생성한다.
  • Condition - 반복문이 계속해서 수행될 조건을 설정한다.
  • Increment - 반복문이 수행될 때마다 변경시키고자 하는 변수값의 변화량을 기술한다.

예제:

for (int i = 0; i < 5; i++) { Console.WriteLine(i); }

출력 결과:

0 1 2 3 4

For 반복문의 일부 영역을 기술하지 않고 공백으로 두어도 무방하나, 정상적인 동작을 위해서는 모든 세미콜론들이 존재하여야 한다.

int input = Console.ReadLine(); for ( ; input < 10; input + 2) { Console.WriteLine(input); }

실행 후 3 을 입력했을 때의 결과:

3 5 7 9 11
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

'번역 > C# Notes for Professionals' 카테고리의 다른 글

28.3: Foreach 반복문  (0) 2021.09.08
28.2: Do - While 반복문  (0) 2021.09.03
27.8: Queue<T>  (0) 2021.08.27
27.7: LinkedList<T>  (0) 2021.08.25
27.6: Stack<T>  (0) 2021.08.24

Section 27.8: Queue<T>

// int 로 이루어진 Queue 객체를 생성한다 var queue = new Queue<int>(); // 데이터를 추가한다 queue.Enqueue(6); queue.Enqueue(4); queue.Enqueue(9); // 추가된 요소들은 "선입 선출 (first in, first out)" 순서로 저장되어 있다. // Queue 의 처음으로부터 끝 방향으로 다음 값들이 저장되어 있다 : 6, 4, 9 // Queue 의 다음 요소를 Queue 에서부터 제거하지 않고 값만 확인한다. Console.WriteLine(queue.Peek()); // 6 이 출력된다. // Queue 의 첫번째 요소를 제거한 뒤 해당 값을 반환한다. Console.WriteLine(queue.Dequeue()); // 6 이 출력된다. Console.WriteLine(queue.Dequeue()); // 4 이 출력된다. Console.WriteLine(queue.Dequeue()); // 9 이 출력된다.

Thread safety 관련 유의사항 : 멀티스레드 환경에서는 ConcurrentQueue 를 사용하도록 한다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

'번역 > C# Notes for Professionals' 카테고리의 다른 글

28.2: Do - While 반복문  (0) 2021.09.03
28.1: For 반복문  (0) 2021.08.27
27.7: LinkedList<T>  (0) 2021.08.25
27.6: Stack<T>  (0) 2021.08.24
27.5: List<T>  (0) 2021.08.24

Section 27.7: LinkedList<T>

// int 로 이루어진 LinkedList 를 생성한다 LinkedList list = new LinkedList<int>(); // 이 리스트에 몇개의 숫자를 추가한다. list.AddLast(3); list.AddLast(5); list.AddLast(8); // 이제 리스트의 내용은 3, 5, 8 이다 list.AddFirst(2); // 이제 리스트의 내용은 2, 3, 5, 8 이다 list.RemoveFirst(); // 이제 리스트의 내용은 3, 5, 8 이다 list.RemoveLast(); // 이제 리스트의 내용은 3, 5 이다

LinkedList<T> 는 이중 연결 리스트 (doubly linked list) 임을 유의한다. 이는 여러 노드들의 컬렉션이며, 각 노드들은 타입 T 인 요소를 갖게 되어 있다. 각 노드들은 자신의 이전 (preceding) 노드와 다음 (following) 노드에 연결되어 있다.

역주 : List<T> 는 인덱스 기반으로 임의의 요소에 접근할 때, LinkedList<T> 는 리스트 중간에 요소를 추가하거나 삭제할 때 더 좋은 성능을 보여줍니다. Stack Overflow 답변 을 참고하세요.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

'번역 > C# Notes for Professionals' 카테고리의 다른 글

28.1: For 반복문  (0) 2021.08.27
27.8: Queue<T>  (0) 2021.08.27
27.6: Stack<T>  (0) 2021.08.24
27.5: List<T>  (0) 2021.08.24
27.4: T[ ] (T 타입을 갖는 배열)  (0) 2021.08.17

Section 27.6: Stack<T>

// int 로 이루어진 스택 객체를 생성한다 var stack = new Stack<int>(); // 데이터를 추가한다 stack.Push(3); stack.Push(5); stack.Push(8); // 추가된 요소들은 "선입 후출 (first in, last out)" 순서로 저장되어 있다. // 스택의 top 에서부터 bottom 방향으로 다음 값들이 저장되어 있다 : 8, 5, 3 // Peek 메소드를 이용하여 스택의 top 요소가 어떤 값을 가지고 있는지 확인할 수 있다. Console.WriteLine(stack.Peek()); // 8 이 출력된다 // Pop 메소드는 스택의 top 요소를 제거한 뒤 해당 값을 반환한다. Console.WriteLine(stack.Pop()); // 8 을 출력한다 Console.WriteLine(stack.Pop()); // 5 를 출력한다 Console.WriteLine(stack.Pop()); // 3 를 출력한다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

'번역 > C# Notes for Professionals' 카테고리의 다른 글

27.8: Queue<T>  (0) 2021.08.27
27.7: LinkedList<T>  (0) 2021.08.25
27.5: List<T>  (0) 2021.08.24
27.4: T[ ] (T 타입을 갖는 배열)  (0) 2021.08.17
27.3: SortedSet<T>  (0) 2021.08.17

Section 27.5: List<T>

List<T> 는 주어진 타입에 대한 리스트를 나타낸다. 이러한 리스트는 항목을 추가하거나, 인덱스 값을 이용해 항목을 삭제하거나 접근하는 등의 동작을 수행할 수 있다.

using System.Collections.Generic; var list = new List<int>() { 1, 2, 3, 4, 5 }; list.Add(6); Console.WriteLine(list.Count); // 6 list.RemoveAt(3); Console.WriteLine(list.Count); // 5 Console.WriteLine(list[3]); // 5

List<T> 는 크기 조절이 가능한 배열과도 유사하다고 할 수 있다. 해당 컬렉션 내용을 순서대로 열거하는 동작과 각 요소들을 인덱스 값을 통해 접근하는 동작은 모두 빠르게 일어난다. 인덱스 값이 아닌 다른 종류의 key 값이나, 혹은 요소 자체의 값을 이용해서 접근을 수행하고자 하는 경우에는 Dictionary<T> 를 이용하는 것이 보다 빠른 검색 결과를 보여줄 것이다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

'번역 > C# Notes for Professionals' 카테고리의 다른 글

27.7: LinkedList<T>  (0) 2021.08.25
27.6: Stack<T>  (0) 2021.08.24
27.4: T[ ] (T 타입을 갖는 배열)  (0) 2021.08.17
27.3: SortedSet<T>  (0) 2021.08.17
27.2: Dictionary<TKey, TValue>  (0) 2021.08.12

+ Recent posts