2 minute read

배열(array) 이란?


배열은 정해진 크기의 메모리 공간을 할당하여 같은 데이터 타입의 데이터를 순차적으로 저장하는 가장 기본적인 자료구조 중 하나입니다. 마치 책꽂이에 책을 순서대로 정리하는 것처럼, 배열은 데이터를 효율적으로 관리하고 접근할 수 있도록 도와주며, 다음과 같은 특징을 가지고 있습니다.

  • 순차적인 저장: 데이터가 메모리 공간에 연속적으로 저장됩니다. 마치 기차의 객차처럼, 데이터들이 순서대로 연결되어 저장됩니다.
  • 빠른 접근: 인덱스를 사용하여 데이터에 빠르게 접근할 수 있습니다. 마치 책갈피를 이용하여 원하는 페이지를 바로 펼치는 것처럼, 배열은 인덱스를 통해 원하는 데이터에 즉시 접근할 수 있습니다.
  • 크기 제한: 배열의 크기는 고정되어 있습니다. 마치 정해진 좌석 수의 버스처럼, 배열은 미리 지정된 크기 이상의 데이터를 저장할 수 없습니다.

장단점


장점

  • 간단하고 직관적인 구조: 데이터를 순차적으로 저장하므로 이해하기 쉽고 사용하기 간편합니다. 마치 알파벳 순서대로 정리된 사전처럼, 배열은 직관적인 구조를 제공합니다.
  • 빠른 데이터 접근: 인덱스를 사용하여 O(1)의 시간 복잡도로 데이터에 빠르게 접근할 수 있습니다. 마치 주소록에서 이름을 검색하여 전화번호를 바로 찾는 것처럼, 배열은 빠른 데이터 접근을 지원합니다.
  • 메모리 효율성: 데이터가 연속적으로 저장되므로 메모리 공간을 효율적으로 사용할 수 있습니다. 마치 퍼즐 조각처럼, 배열은 데이터를 메모리 공간에 촘촘하게 배치합니다.

단점

  • 고정된 크기: 배열의 크기는 고정되어 있어 크기를 초과하는 데이터를 저장할 수 없습니다. 마치 사이즈가 정해진 옷처럼, 배열은 미리 지정된 크기 이상의 데이터를 담을 수 없습니다.
  • 삽입/삭제의 비효율성: 데이터를 삽입하거나 삭제하는 경우, 다른 데이터를 이동시켜야 하므로 시간이 오래 걸립니다. 마치 책꽂이 중간에 책을 넣거나 빼려면 다른 책들을 옮겨야 하는 것처럼, 배열은 데이터 삽입/삭제에 비효율적입니다.
  • 메모리 낭비: 배열의 크기를 너무 크게 잡으면 사용하지 않는 메모리 공간이 발생할 수 있습니다. 마치 큰 방을 혼자 사용하는 것처럼, 배열은 필요 이상의 메모리 공간을 할당할 수 있습니다.

배열의 활용


배열은 선형 데이터구조중에서도 가장 기본적인 부분이다 보니 아래의 부분 이외에도 다양한 부분에서 활용됩니다.

  • 데이터 목록 관리: 학생 목록, 상품 목록 등 데이터를 순서대로 관리하는 데 사용됩니다.
  • 이미지 처리: 이미지의 픽셀 데이터를 배열로 표현하여 처리합니다.
  • 행렬 연산: 행렬을 배열의 2차원 형태로 표현하여 연산합니다.
  • 게임 개발: 게임 오브젝트의 위치, 속도 등 다양한 데이터를 배열로 관리합니다.

문제점&주의사항


  • 크기 제한: Array는 크기가 제한되어 있습니다.
    따라서, Array의 크기를 초과하는 데이터를 저장하려고 하면 오류가 발생하니, 초기에 new할 때 reserve(사이즈를 미리 정하는것) 하시거나, 동적으로 사이즈를 할당하려면 List를 사용하시는것을 추천합니다.
  • 효율성 저하: 데이터를 검색하거나 삭제할 때 배열의 모든 요소를 순차적으로 접근해야 하므로 효율성이 저하될 수 있습니다. 특히 대량의 데이터를 처리하는 경우 성능 문제가 발생할 수 있습니다. 마치 책을 한 권씩 찾거나 빼는 것처럼, 배열은 데이터 검색/삭제에 시간이 오래 걸릴 수 있습니다.
  • 메모리 관리: 더 이상 사용하지 않는 배열은 메모리에서 해제하여 메모리 누수를 방지해야 합니다. 마치 사용한 컵을 깨끗이 씻는 것처럼, 배열을 사용 후에는 메모리를 정리해야 합니다.

예제


아래의 코드가 가장 기본적인 array 예시 코드입니다.

using System;
using System.Collections.Generic;

class ArraySample
{
    static void Main(string[] args)
    {
        // 1. 배열 선언 및 초기화
        int[] myArray = new int[5]; // 5개의 정수를 저장할 수 있는 배열 생성

        // 2. 데이터 저장
        myArray[0] = 10;
        myArray[1] = 20;
        myArray[2] = 30;
        myArray[3] = 40;
        myArray[4] = 50;

        // 3. 데이터 접근
        Console.WriteLine("myArray[2] : " + myArray[2]); // 인덱스 2의 값 출력 (30)

        // 4. 배열의 길이
        Console.WriteLine("배열의 길이 : " + myArray.Length); // 배열의 길이 출력 (5)

        // 5. 배열 순회
        for (int i = 0; i < myArray.Length; i++)
        {
            Console.WriteLine("myArray[" + i + "] : " + myArray[i]);
        }

        // 6. 배열의 모든 요소 출력 (C# 9.0 이상)
        foreach (int value in myArray)
        {
            Console.WriteLine("value : " + value);
        }

        // 7. List<T>를 사용한 동적 배열
        List<int> myList = new List<int>();
        myList.Add(10);
        myList.Add(20);
        myList.Add(30);

        Console.WriteLine("myList[1] : " + myList[1]); // 인덱스 1의 값 출력 (20)
        Console.WriteLine("myList.Count : " + myList.Count); // 리스트의 길이 출력 (3)
    }
}


Top