배열(Array)

JS·2023년 1월 6일
0

Tech Explanation

목록 보기
5/14
post-thumbnail

1. 배열(Array)이란?

  • 같은 타입으로 된 여러 개의 객체를 데이터를 한 번에 다루고자 할 때 사용

2. 배열의 문법


  • 배열 타입의 객체를 생성할 때는 C# 기준 new 연산자를 사용한다
  • 위의 예시에서 arr이라는 배열에 1, 2, 3, 4, 5 의 다섯개의 객체가 들어있는데, 이러한 객체 하나하나를 원소(Element)라고 한다
  • 출력을 원하는 경우 인덱서를 사용하여 값을 출력할 수 있다

3. 배열의 특징

  • 객체란 데이터가 저장된 영역을 나타낸다. 컴퓨터가 데이터를 가져올 때는 저장된 주소와 데이터의 크기를 알아야 하는데 처음의 예시처럼 일일히 모든 객체를 만든다면 제각각의 장소에 독립적으로 값이 저장된다
  • 이는 데이터를 사용하기 위하여 찾을 때 비 효율적이며, 배열을 사용한다면 좀 더 데이터를 효율적으로 사용할 수 있다
  • 배열을 사용할 경우 그림과 같이 데이터가 생성된다. 5개의 데이터는 이웃 메모리에 저장되며, arr[0]에는 그 중 첫번째 데이터로 향할 수 있는 메모리 주소가 저장된다. 때문에 배열 arr의 다른 객체들을 사용하려한다면 arr[0]의 주소를 참조하여 이웃 객체에게 갈 수 있다
  • 이러한 성질을 보고 배열의 데이터는 연속적이라 한다

4. 인덱스가 0부터 시작하는 이유

  • 배열을 선언할 때, 배열의 이름에 저장되는 것은 메모리 주소에 대한 포인터이며 인덱스는 시작 요소로부터 거리를 알려준다
  • 연산을위해 메모리에 접근할 때, 부여받은 주소로 가면 첫 번째 원소가 나타나며 첫 번째 원소는 시작 요소에서 0 거리에있다
  • 예시로서 int[] arr = {1,2,3,4,5}; 가 있을 때 arr[0]에는 arr[0]으로 향하는 주소가 담긴다. 이때, 배열 인덱스가 0이 아닌 1에서 시작한다면

    이러한 메모리 주소가 결과로서 나오게되는데, 이렇게 되면 첫 번째 원소에 접근할 수 없다. 하지만 인덱스가 0부터 시작하게 된다면

    따라서, C# 에서의 배열 인덱스는 항상 0부터 시작한다
  • 0 인덱스로 시작하는 프로그래밍 언어외에 1 인덱스로 시작하는 프로그래밍 언어도 존재한다

5. 다차원 배열(Multi-Dimensional Arrays)

  • 다차원 배열이란 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미한다
  • 다차원 배열은 다음과 같은 방식으로 사용할 수 있다

    이를 도식적으로 표현하면

    다음과 같은 형태가 된다. 하지만 컴퓨터의 메모리는 입체적 공간이 아니며, 선형 공간이기 때문에 다음과 같이 저장된다

6. 가변 배열(Jagged Arrays)

가변 배열은 요소의 크기가 다른 배열이다
이 배열은 각 원소가 배열타입이 되는데 이러한 성질 때문에 가변 배열을 배열의 배열이라고도 한다
가변 배열은 다음과 같은 방식으로 사용할 수 있다

  • 행 수는 선언시 고정되지만, 열 수는 가변적으로 변경할 수 있다
    • 다시말하면 처음 선언부터 사용자가 열 수도 제공하려는 경우, 해당 배열은 더이상 가변 배열이 아니게 된다
  • 각 원소가 배열 형태를 가지므로, 배열 안에서 또 다차원 배열을 만들 수 있다

7. 다차원 배열과 가변 배열의 차이

  • 결정적으로 자료구조의 차이가 있다
  • 다차원 배열에서는 각 차원의 각 요소는 해당 차원의 다른 요소와 동일한 고정 크기를 갖는다
  • 가변 배열에서는 지정된 배열에 필요한 공간만 사용하므로 낭비되는 공간이 없다
  • 다차원 배열의 경우 모든 메모리 구조가 연속적이다. 모든 메모리가 근처에 있어 상대참조로 찾아갈 수 있다
  • 가변 배열의경우 원소끼리만 메모리 구조가 이어져 있으며 서로 다른 원소끼리의 메모리 주소는 떨어져 있다
profile
게임 프로그래머 지망생

0개의 댓글