C# - Array와 List의 차이점

김도현·2023년 11월 7일
0

TIL

목록 보기
59/76

Array vs List

비교
리스트는List<T>는 요소가 추가되고 제거될 때 자동으로 크기를 조정할 수 있는 일반 컬렉션인 반면, 배열은 동일한 요소를 보유할 수 있는 고정 크기 순차 컬렉션입니다.

Array

배열은 길이가 고정된 동일한 데이터 유형의 엄격한 자료형 컬렉션이다. 즉, 한번 생성되면 크기를 변공할 수 없습니다. 배열 요소는 0부터 시작해서 숫자 인덱스를 사용하여 접근 할 수 있습니다.

  • 엄격한 자료형(Strongly Typed)란? 함수/메서드에 전달하는 객체나 값의 타입이 프로그래머의 의도와 다를 때 컴파일러가 에러를 내거나 컴파일을 거부하는 식으로 타입이 엄격하게 맞춘다는 의미입니다.

따라서 배열의 첫 번째 항목은 인덱스 0에 있고 두 번째 항목은 인덱스 1에 있는 식입니다.

숫자 배열 항목의 기본값은 0이고 참조 배열 요소의 기본값은 null입니다.

배열 클래스는 System.Array네임스페이스에서 사용할 수 있습니다. 배열을 정의하려면 대괄호 "[]"를 사용하고 배열이 보유할 데이터 유형(예: 정수, 문자열)을 지정하고 배열에 이름을 지정합니다.

Array생성

// Create an integer array called 'intArray' with a length of 5
int[] intArray = new int[5];



// Alternatively, you can initialize the array with specific values like this:


int[] intArray = new int[] {10, 20, 30, 40, 50};


// Now, 'intArray' contains the following values at different indexes:
// Index 0: 10
// Index 1: 20
// Index 2: 30
// Index 3: 40
// Index 4: 50

배열에 접근

using System;
namespace CSharpArrayExample
{
    public class CSharpArrayExample
    {   
        static void Main(string[] args)
        {
            // Declare an array
            string[] fruitsName = { "Apple", "Orange", "Banana", "Grapes"};

            // Access the elements of an Array using index
            Console.WriteLine(fruitsName[0]); // Output: Apple

            // Access the elements using for loop
            for(int index = 0; index < fruitsName.Length; index ++)
            {
                Console.WriteLine(fruitsName[index]);
            }

            Console.ReadKey();
        }
        //Output:
        // Apple
        // Orange
        // Banana
        // Grapes
    }
}

List

List<T>: C#에서 List는 index 또는 loop를 통해 액세스할 수 있는 강력한 형식의 개체 컬렉션을 나타내는 데 사용되는 제네릭 형식이다. List 클래스는 System.Collection.Generic 네임스페이스에서 사용할 수 있다.

엄격한 자료형의 Object 컬렉션에서 요소를 검색, 정렬, 조작, 추가 및 제거할 수 있다.

C# List에는 요소가 추가되거나 제거될 때 동적으로 크기를 조정하는 기능과 같은 많은 추가적인 특징이 있다.

List 클래스와 이를 C#에서 사용하는 방법에 대해 자세히 알고 싶다면 이전 기사인 " C# List Class 를 확인하세요 .

구문

다음은 일반적인 List<T>를 선언하는 구문이다. List의 매개변수 T는 List의 항목 유형을 나타내며 int, long, string, 또는 사용자 정의 객체일 수 있다.

List<T> myList = new List<T>();

C# List<T> 예제

다음은 C#의 List 사용 예제이다.

using System;
using System.Collections.Generic;
namespace CSharpListExample
{
    public class CSharpArrayExample
    {   
        static void Main(string[] args)
        {
            // string 타입의 일반 리스트 선언
            List<string> fruitsName = new List<string>();
           
            // List에 항목 추가
            fruitsName.Add("Apple");
            fruitsName.Add("Orange");
            fruitsName.Add("Banana");
            fruitsName.Add("Grapes");
             
            // index를 사용하여 List의 요소에 액세스
            Console.WriteLine(fruitsName[0]); // 출력: Apple
 
            // for loop를 사용하여 리스트의 요소에 액세스
            for(int index = 0; index < fruitsName.Count; index ++)
            {
                Console.WriteLine(fruitsName[index]);
            }
 
            Console.ReadKey();
        }
        
        // 출력:
        // Apple
        // Orange
        // Banana
        // Grapes
    }
}

Array와 List 비교

파라미터C# ListC# Array
1. 길이항목이 추가되거나 제거될 때 동적으로 사이즈가 변한다.크기가 고정되어 있으므로, 동일한 데이터 유형의 고정된 개수의 요소만 저장할 수 있다.
2. 네임스페이스System.Collection.Generic 네임스페이스에 속해있다.System.Array 네임스페이스에 속해있다.
3. 메모리동적이며 무작위이다.
List에 정의된 각 노드에는 자체 메모리 세트가 있으므로 List는 Array보다 더 많은 메모리를 차지한다.
정적이며 연속적이다.
메모리 효율적이다.
4. 활용요소를 자주 추가하고 제거할 때 유용하다.변경 가능성이 없는 고정된 수의 요소가 있고 비순차적 방식으로 자주 액세스하려는 경우에 편리하다.
5. 속도실행 속도가 느리다.실행 속도가 더 빠르다.
6. 메모리 관리메모리 낭비가 없다.메모리 낭비는 Array의 문제점이다.
Array에 할당된 많은 메모리 블록은 고정 크기 메모리가 할당된 후 새 항목이 추가될 때까지 사용되지 않은 상태로 유지된다.
또한 다른 프로세스에 할당할 수 없으므로 메모리 낭비가 발생한다.
7. 메모리 구조비연속 메모리 할당이 수행된다.
비연속 메모리 할당은 프로세스를 다양한 블록으로 분리하며, 이후 메모리 공간 가용성에 따라 메모리의 다른 주소 공간에 배치된다.
비연속 메모리 할당은 페이징 및 분할로 설명된다.
연속 메모리 할당이 수행된다.
연속 메모리 할당 기술은 요구 사항에 따라 프로세스에 단일 연속 메모리 블록을 할당한다. 메모리 공간은 고정된 크기의 파티션으로 나뉘고 각 파티션은 하나의 프로세스에만 할당된다.

C# 배열과 목록의 차이점:

정의:

  • Array는 안정렬연속된 메모리 위치 에 동일한 데이터 유형의 요소를 저장하는 고정 크기 컬렉션 입니다.
  • List가 동일한 데이터 유형의 요소를 저장할 수 있고 요소가 추가되거나 제거될 때 자동으로 크기가 조정되는 동적 크기 컬렉션 입니다.

유연성:

  • Array은 생성 후에 크기를 변경할 수 없으므로 유연성이 떨어집니다. 변경하려면 크기가 다른 새 배열을 만들어야 합니다.
  • List는 크기에 대해 걱정하지 않고 요소를 추가하거나 제거할 수 있으므로 더 유연합니다.

성능:

  • Array는 일반적으로 연속 메모리와 직접 인덱싱으로 인해 고정 크기 컬렉션 에 대해 더 나은 성능을 발휘합니다 .
  • List 에는 동적 크기 조정 으로 인해 약간의 성능 오버헤드가 있을 수 있지만 대부분의 사용 사례에서는 그 차이가 미미합니다.

초기화:

  • Array요소는 선언 중에 직접 초기화될 수 있습니다.
  • List의 요소는 하나씩 추가해야 하거나 기존 컬렉션으로 초기화할 수 있습니다.

네임스페이스:

  • Array은 C# 언어의 일부이며 추가 네임스페이스가 필요하지 않습니다.
  • List은 네임스페이스의 일부이므로 System.Collections.Generic이를 가져와야 합니다.

인덱스 액세스:

  • 인덱스 표기법(예:array[index])을 사용하여 배열의 요소에 접근할 수 있습니다.
  • 배열과 마찬가지로 인덱스 표기법(예:list[index])을 사용하여 목록의 요소에 접근할 수 있습니다.

요소 유형:

  • Array은 동일한 유형(동종)의 요소만 보유할 수 있습니다.
  • List은 동일한 유형(동종)의 요소를 보유할 수도 있지만 제네릭을 사용하여 다른 유형을 보유할 수도 있습니다.

사용 시기:

  • 컬렉션의 정확한 크기를 미리 알고 있고 자주 변경할 필요가 없는 경우 배열을 사용하세요.
  • 필요에 따라 늘리거나 줄일 수 있는 유연한 컬렉션을 원하거나 데이터 조작을 위한 추가 방법이 필요한 경우 목록을 사용하세요.

0개의 댓글