본문 바로가기

알고리즘 & 자료구조/자료구조

[자료구조] 배열(Array)

배열이란?

  • 배열은 연속적인 메모리 상에 동일한 데이터 타입의 요소들을 순차적으로 일렬로 저장하는 자료구조.
  • 순차적으로 나열된 배열요소는 각 요소마다 인덱스가 붙는다.  ex) x[0], x[1]....
  • 배열의 크기는 고정적이다. 
  • 배열 인덱스를 사용할 경우 배열요소에 즉시 엑세스할 수 있다. 

 

배열의 차원(Dimension)

  • 한 배열요소를 선택하기 위해 사용하는 인덱스의 수
  • C#은 32차원 배열까지 지원한다.

 

가변 배열(Jagged Array)

  • 배열의 요소가 배열타입인 경우

        ex) x[0] = new int[2];

        x[1] = new int[6]{1, 2, 3, 4, 5, 6};

        x[2] = new int[3]{9, 8, 7};

 

동적 배열 (Dynamic Array)

  • 정적 배열은 초기화 시 지정한 고정크기를 계속 유지하는 배열
  • 배열을 확장하거나 축소하는 기능을 갖는 배열을 동적배열이라 한다.

동적 배열

 public static class DynamicArray
    {
        private static object[] arr = new object[0];

        public static void Add(object element) 
        {
            // 기존 배열 크기보다 1이 더 큰 임시 배열 생성
            var temp = new object[arr.Length + 1];
            for (int i = 0; i < arr.Length; i++) 
            {
                // 임시 배열에 요소 복사
                temp[i] = arr[i];
            }

            // 임시 배열을 기존 배열에 할당
            arr = temp;

            // 배열 마지막 인덱스에 새 배열요소 추가
            arr[arr.Length - 1] = element;        
        }
    }

고찰

위와 같은 방식은 배열을 동적으로 증가시키는 방식으로 필요한 공간만 사용한다는 장점이 있지만, 매번 새로운 배열 공간을 생성하고 여기에 기존 배열요소들을 전부 복사해야 한다는 단점이 있다.  => 메모리 측면에서도 고민해보자.