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

// 두개의 요소를 가지는 배열 생성하기 var myArray = new [] { "one", "two" }; // 배열 내용 항목들을 열거하기 foreach(var item in myArray) { Console.WriteLine(item); } // 출력 결과: // one // two // 첫번째 위치의 항목을 교체하기 // 모든 컬렉션들은 인덱스 값이 0 부터 시작됨에 유의한다 myArray[0] = "something else"; // 배열 내용 항목들을 다시 한번 열거하기 foreach(var item in myArray) { Console.WriteLine(item); } // 출력 결과: // something else // two
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

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

반응형

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

27.6: Stack<T>  (0) 2021.08.24
27.5: List<T>  (0) 2021.08.24
27.3: SortedSet<T>  (0) 2021.08.17
27.2: Dictionary<TKey, TValue>  (0) 2021.08.12
27.1: HashSet<T>  (0) 2021.08.12

+ Recent posts