푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 배우기
C# 배우기

다른 카테고리

C# 배열 이해하기

Layla Porter
21분 53초

C#에서 배열은 개발자가 동일한 형식의 요소들을 연속적인 메모리 위치에 저장할 수 있도록 해주는 기본적인 데이터 구조입니다. 배열은 1차원, 다차원 또는 불규칙 배열일 수 있습니다.

이 C# 배열 관련 글은 Layla Porter의 교육 영상 " C# for Beginners Part 5 - Arrays and More Loops"에서 영감을 받았습니다. Layla는 이 영상에서 배열의 기본 개념을 자세히 살펴보고 C#의 다양한 반복 기법을 소개하여 시청자들이 컬렉션을 관리하고 데이터를 효율적으로 순회하는 데 필요한 핵심 기술을 습득할 수 있도록 돕습니다.

배열 이해하기

레이라는 C#에서 배열을 고정 길이 컬렉션으로 설명하는 것으로 시작합니다. 배열의 크기가 동적으로 변경될 수 있는 다른 프로그래밍 언어와 달리, C#의 배열은 한 번 생성되면 변경할 수 없습니다. 이는 메모리 할당 제약으로 인해 초기화 후에는 크기를 변경할 수 없다는 것을 의미합니다.

간단한 콘솔 조작: 좋아하는 치즈 고르기

다음 코드에서 배열과 대조적으로 Layla(1:50)는 먼저 사용자가 선택할 수 있는 항목 목록을 표시하는 방법을 보여줍니다.

Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");
Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");

이 코드는 먼저 Console.WriteLine를 사용하여 사용자가 가장 좋아하는 치즈가 무엇인지 콘솔에 메시지를 출력합니다. 그런 다음 Console.WriteLine를 네 번 더 사용하여 콘솔에 치즈 목록을 출력합니다. 그 후 코드는 Console.ReadLine를 사용하여 콘솔로부터 사용자의 입력을 읽고 그것을 변수 favouriteCheese에 저장합니다. 마지막으로, 코드는 Console.WriteLine를 다시 사용하여 사용자의 좋아하는 치즈를 포함한 메시지를 콘솔에 출력합니다.

레이라는 2분 4초에 이 코드를 실행하여 작동 방식을 보여줍니다.

Understanding Csharp Arrays 1 related to 간단한 콘솔 조작: 좋아하는 치즈 고르기

배열 선언 - 배열 초기화

예를 들어, Layla는 문자열 배열을 선언하고 초기화하는 방법을 보여주는 것으로 시작합니다. 이 경우, 배열은 처음에 사용자에게 메뉴로 제시된 치즈 목록입니다. 그녀는 1차원 배열을 정의하는 구문(2:30)과 중괄호를 사용하여 초기값으로 배열을 채우는 구문(2:54)을 소개합니다.

string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };
string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };

그녀는 배열에서 0부터 시작하는 인덱싱의 중요성을 강조합니다. 1차원 배열의 첫 번째 요소는 인덱스 0을 사용하여 접근합니다. 이어서 레일라는 for 루프를 사용하여 배열을 순회하는 방법을 보여줍니다. 이 루프 구조는 특정 조건에 따라 코드를 반복적으로 실행할 수 있게 해주기 때문에 프로그래밍에서 매우 중요합니다.

반복문 구현하기

이제 반복문에 대해 이야기해 보겠습니다. 레이라는 for 반복문의 세 가지 필수 구성 요소인 초기화자, 조건, 그리고 반복자를 소개합니다. 이 반복문은 배열의 길이를 기준으로 배열의 요소들을 순회하는 데 사용됩니다.

for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(cheeses[i]);
}
for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(cheeses[i]);
}

그녀는 4:44에 cheeses.Length가 배열의 요소 수를 제공하여 반복문이 정확히 각 요소를 반복하도록 보장한다고 강조합니다. 변수 i는 인덱스를 통해 반복하는 인덱스 변수로 작동합니다. 이는 배열 요소에 액세스하지 않고 위의 Console.WriteLine 메서드를 여러 번 작성하지 않고도 개별 배열 요소를 효과적으로 출력합니다. 레이라는 6시 17분에 애플리케이션을 실행하여 이 for 루프의 출력 결과가 이전 예제와 완전히 동일함을 보여줍니다.

Understanding Csharp Arrays 2 related to 반복문 구현하기

정렬과 가변성

Layla는 정렬의 이점을 설명한 후 7:17에 Sort 메서드를 사용하여 배열을 알파벳순으로 정렬하는 방법을 시연하며, 정렬이 실제로 C#의 배열 불변성 때문에 새로운 배열을 만든다고 경고합니다. 이는 데이터 조작이 메모리와 성능에 미치는 영향을 이해하는 데 있어 매우 중요한 부분입니다.

Array.Sort(cheeses);
Array.Sort(cheeses);

그녀는 또한 새 배열을 만들지 않고도 배열 내의 개별 요소를 직접 수정할 수 있는 방법을 보여주며(8:10), 불변성 내의 가변성을 설명합니다. 대체될 요소의 인덱스는 cheeses 배열 변수 뒤의 대괄호 안에 전달됩니다:

cheeses[0] = "Roquefort";
cheeses[0] = "Roquefort";

이렇게 하면 배열의 0번째 인덱스에 있는 "Brie" 요소가 새 값 "Roquefort"로 대체됩니다.

치즈 목록 업데이트: 새 항목 처리 (8:46)

레이라는 기존 리스트에 값을 추가하는 방법을 설명합니다. 기존 값과 새 값을 가져와 두 값을 모두 포함하는 새 배열을 만들고, 참조를 이 새 배열을 가리키도록 업데이트하는 과정입니다. 다음 코드는 작동 방식을 보여줍니다.

var favouriteCheese = Console.ReadLine();

bool containsFavourite = false;

foreach (var cheese in cheeses)
{
    if (favouriteCheese == cheese)
    {
        containsFavourite = true;
    }
}

if (!containsFavourite)
{
    cheeses = cheeses.Append(favouriteCheese).ToArray();
}
var favouriteCheese = Console.ReadLine();

bool containsFavourite = false;

foreach (var cheese in cheeses)
{
    if (favouriteCheese == cheese)
    {
        containsFavourite = true;
    }
}

if (!containsFavourite)
{
    cheeses = cheeses.Append(favouriteCheese).ToArray();
}

이 예는 기본 배열 작업과 foreach 반복문을 사용하여 치즈가 목록에 이미 있는지 확인하는 과정을 간단하게 보여줍니다. 만약 그렇지 않다면 Layla는 그것을 Append 메서드와 System.Linq를 사용하여 배열에 추가합니다 (13:33).

Layla는 13:50에 cheesesAppend의 결과가 다른 유형이기 때문에 코드에 오류가 발생한다고 말합니다. Append은 컬렉션을 위한 인터페이스인 IEnumerable을 반환합니다. 이를 해결하기 위해 IEnumerableToArray() 메서드를 사용하여 배열로 변환한 다음 cheeses에 다시 할당합니다. Layla는 노란 물결 줄이 favouriteCheese가 null인 것과 같은 잠재적 문제를 나타내는 컴파일러 경고라고 언급하지만, 우리는 이 데모에서 안전성 검사를 무시하고 있습니다.

치즈 목록 업데이트 및 인쇄

레일라는 배열에 새 항목을 추가한 후에는 업데이트된 목록을 화면에 출력해야 한다고 설명합니다. 이를 달성하기 위해 우리는 for 반복문을 사용하여 각 요소가 포함된 인덱스를 함께 출력하여 배열이 이제 더 많은 항목을 포함하고 있음을 보여줍니다.

Console.WriteLine("The new list:");

for (var i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(i + " " + cheeses[i]);
}

Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");
Console.WriteLine("The new list:");

for (var i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(i + " " + cheeses[i]);
}

Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");

이는 C#에서 배열의 동적인 특성을 보여주며, 새 요소를 추가하고 배열 내용을 출력하여 업데이트를 확인하는 방법을 보여줍니다.

레이라는 새로 추가된 치즈를 표시하기 위해 애플리케이션을 실행합니다(15:19).

Understanding Csharp Arrays 3 related to 치즈 목록 업데이트 및 인쇄

객체 배열을 활용한 기능 향상

이해를 넓히기 위해 Layla는 Cheese 클래스의 객체 배열을 만들고 NameStrength에 대한 속성을 포함하여 소개합니다 (16:14). 그녀는 문자열 목록을 바꾸어 Cheese 객체 배열을 생성하고 반복 중에 객체 내에 있는 속성에 접근하는 방법을 시연합니다 (17:46).

class Cheese
{
    public string Name { get; set; }
    public int Strength { get; set; }

    public Cheese(string name, int strength)
    {
        Name = name;
        Strength = strength;
    }
}

Cheese[] cheeses = new Cheese[]
{
    new Cheese("Stilton", 3),
    new Cheese("Cheddar", 2),
    new Cheese("Pineapple", 1),
    new Cheese("Brie", 2)
};

cheeses[0] = new Cheese("Roquefort", 4);
class Cheese
{
    public string Name { get; set; }
    public int Strength { get; set; }

    public Cheese(string name, int strength)
    {
        Name = name;
        Strength = strength;
    }
}

Cheese[] cheeses = new Cheese[]
{
    new Cheese("Stilton", 3),
    new Cheese("Cheddar", 2),
    new Cheese("Pineapple", 1),
    new Cheese("Brie", 2)
};

cheeses[0] = new Cheese("Roquefort", 4);

이 부분에서는 배열이 어떻게 복잡한 데이터 구조를 캡슐화하여 프로그래밍에 유연성과 강력한 기능을 제공하는지에 대한 기본적인 이해를 제공합니다.

치즈 객체를 반복문에서 활용하기

이제 레이라는 업데이트된 목록의 모든 요소를 ​​화면에 출력하는 방법을 보여줍니다. 이 시나리오에서는 각 치즈가 NameStrength 속성을 가진 객체로 표현됩니다. for 반복문은 Cheese 객체 배열을 반복하며, 각 반복은 단일 배열 요소를 직접 처리합니다.

for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}
for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}

이 반복문은 Cheese 객체의 속성에 cheeses 배열 내에서 접근을 단순화합니다. 레이라는 20시 34분에 프로그램을 실행했고 출력 결과는 다음과 같습니다.

Understanding Csharp Arrays 4 related to 치즈 객체를 반복문에서 활용하기

결론

결론적으로, Layla Porter의 C# 배열 및 반복문 튜토리얼은 초보자들이 이러한 필수 개념을 이해하는 데 탄탄한 기초를 제공합니다. 배열과 다양한 반복문 구조를 숙달함으로써, C# 개발자를 꿈꾸는 사람들은 프로그램에서 데이터 구조를 효과적으로 조작하고 컬렉션을 순회할 수 있습니다. 이러한 기본 사항을 이해하는 것은 더욱 복잡한 애플리케이션을 구축하고 C# 프로그래밍의 다양한 측면을 탐구하는 데 매우 중요합니다.

레이라의 예시와 설명을 따라가다 보면 초보자들도 자신의 C# 프로젝트에서 배열과 반복문을 효과적으로 사용하는 데 자신감을 얻을 수 있습니다. C# 컬렉션과 고급 2차원 배열 및 가변 배열에 대한 보다 심층적인 내용은 후속 튜토리얼 및 실습을 참조하시기 바랍니다.

Hero Worlddot related to C# 배열 이해하기
Hero Affiliate related to C# 배열 이해하기

사랑하는 것을 공유하여 더 많은 수익을 얻으세요

당신은 .NET, C#, Java, Python, 또는 Node.js를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해