일반 목록 형식을 사용하여 데이터 컬렉션을 관리하는 방법 알아보기Learn to manage data collections using the generic list type

이 소개 자습서에서는 C# 언어 및 List<T> 클래스의 기본 사항을 소개합니다.This introductory tutorial provides an introduction to the C# language and the basics of the List<T> class.

이 자습서에서는 개발에 사용할 수 있는 머신이 있다고 예상합니다.This tutorial expects you to have a machine you can use for development. .NET 자습서 Hello World 10분 완성에는 Windows, Linux 또는 macOS의 로컬 개발 환경 설정에 대한 지침이 포함되어 있습니다.The .NET tutorial Hello World in 10 minutes has instructions for setting up your local development environment on Windows, Linux, or macOS. 사용할 명령에 대한 간단한 개요는 개발 도구 익히기에 자세한 정보의 링크와 함께 나와 있습니다.A quick overview of the commands you'll use is in Become familiar with the development tools, with links to more details.

기본 목록 예제A basic list example

list-tutorial이라는 디렉터리를 만듭니다.Create a directory named list-tutorial. 현재 디렉터리로 지정하고 dotnet new console을 실행합니다.Make that the current directory and run dotnet new console.

편집기에서 Program.cs를 열고 기존 코드를 다음으로 바꿉니다.Open Program.cs in your favorite editor, and replace the existing code with the following:

using System;
using System.Collections.Generic;

namespace list_tutorial
{
    class Program
    {
        static void Main(string[] args)
        {
            var names = new List<string> { "<name>", "Ana", "Felipe" };
            foreach (var name in names)
            {
                Console.WriteLine($"Hello {name.ToUpper()}!");
            }
        }
    }
}

<name>을 사용자의 이름으로 바꿉니다.Replace <name> with your name. Program.cs를 저장합니다.Save Program.cs. 콘솔 창에 dotnet run을 입력하여 시도해 보세요.Type dotnet run in your console window to try it.

문자열 목록을 만들고, 해당 목록에 3개의 이름을 추가하고, 이름을 모두 대문자로 출력했습니다.You've just created a list of strings, added three names to that list, and printed out the names in all CAPS. 이전 자습서에서 학습한 개념을 사용하여 목록을 반복합니다.You're using concepts that you've learned in earlier tutorials to loop through the list.

이름을 표시하는 코드는 문자열 보간 기능을 사용합니다.The code to display names makes use of the string interpolation feature. string 앞에 $ 문자를 넣으면 문자열 선언에 C# 코드를 포함할 수 있습니다.When you precede a string with the $ character, you can embed C# code in the string declaration. 실제 문자열은 C# 코드를 생성하는 값으로 바꿉니다.The actual string replaces that C# code with the value it generates. 이 예제에서는 ToUpper 메서드를 호출했기 때문에 {name.ToUpper()}를 대문자로 변환된 각 이름으로 바꿉니다.In this example, it replaces the {name.ToUpper()} with each name, converted to capital letters, because you called the ToUpper method.

계속해서 살펴보겠습니다.Let's keep exploring.

목록 콘텐츠 수정Modify list contents

생성한 컬렉션은 List<T> 형식을 사용합니다.The collection you created uses the List<T> type. 이 형식은 요소의 시퀀스를 저장합니다.This type stores sequences of elements. 꺾쇠 괄호 사이의 요소 형식을 지정합니다.You specify the type of the elements between the angle brackets.

List<T> 형식은 늘리거나 줄일 수 있어 요소를 추가하거나 제거할 수 있습니다.One important aspect of this List<T> type is that it can grow or shrink, enabling you to add or remove elements. Main 메서드에서 }를 닫기 전에 이 코드를 추가합니다.Add this code before the closing } in the Main method:

Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

목록 끝에 이름을 두 개 더 추가했습니다.You've added two more names to the end of the list. 또한 이름을 하나 제거했습니다.You've also removed one as well. 파일을 저장하고 dotnet run을 입력하여 시도해 보세요.Save the file, and type dotnet run to try it.

List<T>를 사용하면 인덱스별로 각 항목을 참조할 수도 있습니다.The List<T> enables you to reference individual items by index as well. 목록 이름 뒤 [] 토큰 사이에 인덱스를 배치합니다.You place the index between [ and ] tokens following the list name. C#은 첫 번째 인덱스에 0을 사용합니다.C# uses 0 for the first index. 방금 추가한 코드 바로 아래에 이 코드를 추가하여 시도합니다.Add this code directly below the code you just added and try it:

Console.WriteLine($"My name is {names[0]}");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");

목록의 끝을 벗어나는 인덱스에 액세스할 수 없습니다.You cannot access an index beyond the end of the list. 인덱스는 0부터 시작하므로, 가장 큰 유효 인덱스는 목록의 항목 수보다 하나 작습니다.Remember that indices start at 0, so the largest valid index is one less than the number of items in the list. Count 속성을 사용하여 목록의 길이를 확인할 수 있습니다.You can check how long the list is using the Count property. Main 메서드의 끝에 다음 코드를 추가합니다.Add the following code at the end of the Main method:

Console.WriteLine($"The list has {names.Count} people in it");

파일을 저장하고 dotnet run을 다시 입력하여 결과를 확인합니다.Save the file, and type dotnet run again to see the results.

목록 검색 및 정렬Search and sort lists

샘플에서는 상대적으로 작은 목록을 사용하지만 애플리케이션에서는 수천에 달하는 많은 요소가 포함된 목록을 작성할 수 있습니다.Our samples use relatively small lists, but your applications may often create lists with many more elements, sometimes numbering in the thousands. 이러한 큰 컬렉션에서 요소를 찾으려면 여러 항목의 목록을 검색해야 합니다.To find elements in these larger collections, you need to search the list for different items. IndexOf 메서드는 항목을 검색하고 항목의 인덱스를 반환합니다.The IndexOf method searches for an item and returns the index of the item. Main 메서드의 맨 아래에 이 코드를 추가합니다.Add this code to the bottom of your Main method:

var index = names.IndexOf("Felipe");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");
}

index = names.IndexOf("Not Found");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");

}

목록의 항목도 정렬할 수 있습니다.The items in your list can be sorted as well. Sort 메서드는 일반적인 순서(문자열의 경우 사전순)로 목록의 모든 항목을 정렬합니다.The Sort method sorts all the items in the list in their normal order (alphabetically in the case of strings). Main 메서드의 맨 아래에 이 코드를 추가합니다.Add this code to the bottom of our Main method:

names.Sort();
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

파일을 저장하고 dotnet run을 입력하여 이 최신 버전을 사용해 보세요.Save the file and type dotnet run to try this latest version.

다음 섹션을 시작하기 전에 현재 코드를 별도의 메서드로 이동합니다.Before you start the next section, let's move the current code into a separate method. 이렇게 하면 새 예제 작업을 쉽게 시작할 수 있습니다.That makes it easier to start working with a new example. Main 메서드의 이름을 WorkingWithStrings로 바꾸고 WorkingWithStrings를 호출하는 새 Main 메서드를 작성합니다.Rename your Main method to WorkingWithStrings and write a new Main method that calls WorkingWithStrings. 작업을 마치면 코드가 다음과 같이 됩니다.When you have finished, your code should look like this:

using System;
using System.Collections.Generic;

namespace list_tutorial
{
    class Program
    {
        static void Main(string[] args)
        {
            WorkingWithStrings();
        }

        public static void WorkingWithStrings()
        {
            var names = new List<string> { "<name>", "Ana", "Felipe" };
            foreach (var name in names)
            {
                Console.WriteLine($"Hello {name.ToUpper()}!");
            }

            Console.WriteLine();
            names.Add("Maria");
            names.Add("Bill");
            names.Remove("Ana");
            foreach (var name in names)
            {
                Console.WriteLine($"Hello {name.ToUpper()}!");
            }

            Console.WriteLine($"My name is {names[0]}");
            Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");

            Console.WriteLine($"The list has {names.Count} people in it");

            var index = names.IndexOf("Felipe");
            Console.WriteLine($"The name {names[index]} is at index {index}");

            var notFound = names.IndexOf("Not Found");
            Console.WriteLine($"When an item is not found, IndexOf returns {notFound}");

            names.Sort();
            foreach (var name in names)
            {
                Console.WriteLine($"Hello {name.ToUpper()}!");
            }
        }
    }
}

다른 형식 목록Lists of other types

지금까지 목록에 string 형식을 사용했습니다.You've been using the string type in lists so far. 다른 형식을 사용하여 List<T>를 만들어 보겠습니다.Let's make a List<T> using a different type. 숫자 집합을 빌드하겠습니다.Let's build a set of numbers.

Main 메서드의 맨 아래에 다음을 추가합니다.Add the following to the bottom of your new Main method:

var fibonacciNumbers = new List<int> {1, 1};

정수 목록을 만들고 처음 두 정수를 값 1로 설정합니다.That creates a list of integers, and sets the first two integers to the value 1. 숫자 시퀀스인 피보나치 시퀀스의 첫 번째 두 값입니다.These are the first two values of a Fibonacci Sequence, a sequence of numbers. 다음 각 피보나치 수는 이전의 두 수의 합계를 사용하여 찾습니다.Each next Fibonacci number is found by taking the sum of the previous two numbers. 이 코드를 추가합니다.Add this code:

var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];

fibonacciNumbers.Add(previous + previous2);

foreach (var item in fibonacciNumbers)
    Console.WriteLine(item);

파일을 저장하고 dotnet run을 입력하여 결과를 확인합니다.Save the file and type dotnet run to see the results.

이 섹션에만 집중하려면 WorkingWithStrings();를 호출하는 코드를 주석으로 처리할 수 있습니다.To concentrate on just this section, you can comment out the code that calls WorkingWithStrings();. // WorkingWithStrings();처럼 호출 앞에 / 문자를 두 개 배치합니다.Just put two / characters in front of the call like this: // WorkingWithStrings();.

과제Challenge

이 단원과 이전 단원에서 학습한 개념을 함께 적용할 수 있는지 확인하세요.See if you can put together some of the concepts from this and earlier lessons. 피보나치 수를 사용하여 지금까지 빌드한 내용을 확장합니다.Expand on what you've built so far with Fibonacci Numbers. 코드를 작성하여 시퀀스에서 처음 20개 수를 생성합니다.Try to write the code to generate the first 20 numbers in the sequence. (힌트: 20번째 피보나치 수는 6765입니다.)(As a hint, the 20th Fibonacci number is 6765.)

과제 완료Complete challenge

GitHub에서 완료된 샘플 코드를 보고 예제 솔루션을 확인할 수 있습니다.You can see an example solution by looking at the finished sample code on GitHub.

루프의 각 반복을 통해 목록의 마지막 두 정수를 사용하고, 더하고, 해당 값을 목록에 추가합니다.With each iteration of the loop, you're taking the last two integers in the list, summing them, and adding that value to the list. 목록에 20개의 항목이 추가될 때까지 루프가 반복됩니다.The loop repeats until you've added 20 items to the list.

축하합니다. 목록 자습서를 완료했습니다.Congratulations, you've completed the list tutorial. 자체 개발 환경에서 클래스 소개 자습서를 계속할 수 있습니다.You can continue with the Introduction to classes tutorial in your own development environment.

.NET 가이드컬렉션 항목에서 List 형식에 대해 더 자세히 학습할 수 있습니다.You can learn more about working with the List type in the .NET Guide topic on collections. 다른 많은 컬렉션 형식에 대해서도 학습합니다.You'll also learn about many other collection types.