푸터 콘텐츠로 바로가기
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을 사용하여 사용자에게 좋아하는 치즈가 무엇인지 묻는 메시지를 콘sole에 출력합니다. 그런 다음 연속해서 네 번 더 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 반복문 구현하기

정렬과 가변성

레이라는 정렬의 이점을 설명한 후, 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 루프를 사용하여 치즈가 목록에 이미 있는지를 확인하는 과정을 간단하게 보여줍니다. 만약 없다면, 레일라는 System.Linq에서 Append 메서드를 사용하여 배열에 추가합니다 (13:33).

레이라는 13:50에 코드가 오류가 발생하는 이유가 cheesesAppend의 결과가 서로 다른 타입이기 때문이라고 말합니다. AppendIEnumerable를 반환하는데, 이는 컬렉션 인터페이스입니다. 이를 해결하기 위해, 우리는 IEnumerable를 배열로 변환하기 위해 ToArray() 메서드를 사용한 후 cheeses에 다시 할당합니다. 레이라는 노란 굽은 선이 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 치즈 목록 업데이트 및 인쇄

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

이해를 넓히기 위해, 레일라는 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시간 온라인으로 운영합니다.
채팅
이메일
전화해