1) 비슷한 성질을 가지는 다수의 데이터를 다루기 위함
2) 즉, 같은 타입으로 된 여러개의 객체를 한 번에 다룰 수 있음
1) 배열로 관리하는 각 객체를 의미
2) 같은 배열의 원소는 연속된 메모리 공간에 할당
3) 배열 객체에 실제로 저장된 데이터는 첫 원소가 위치한 메모리 주소
1) C#의 일부 타입은 new 연산자를 이용해 객체를 생성
2) 배열과 같이 객체에 메모리 주소가 저장되는 경우 해당
배열도 타입의 일종이므로, 앞서 다룬 객체의 생성과 유사함
하지만 new 연산자를 이용한다!
int[] grade = new int[30];
→ 배열로 관리할 데이터의 타입[] 배열 이름 = new 연산자 각원소의 타입[배열의 크기]
int[] arr = new int[5]{1, 2, 3, 4, 5};
int[] arr = {1, 2, 3, 4, 5};
→ 동일한 데이터의 배열이 생성됨
int[] arr = new int[5];
arr = {1, 2, 3, 4, 5};
int[] arr = new int[5];
1) 배열의 원소는 연속적으로 메모리에 배치됨
2) 첫번째 원소의 인덱스는 0
3) 다음 원소는 각각 (이전 원소의 인덱스) + 1을 인덱스로 가짐
1) 배열의 원소를 찾아가는 방식 (주소 연산 방식)
2) 첫번째 원소의 주소만 알면 연속된 이후 데이터의 주소를 알 수 있고, 이 방식을 연산할 공식을 첫번째 원소에도 적용할 수 있도록 인덱스가 0부터 시작하는 것
1) 데이터를 논리적으로 구분하여 사용하는 배열
2) 실제 메모리에 원소들이 구분되어 저장되지 않음, 연속적으로 저장되는 특징은 그대로
3) 예시 (30명 씩 10반인 학생 총 300명의 성적을 관리하는 배열을 사용할 때)
int[] grades = new int[300] { ... };
int grade = grades[30 * (2 - 1) + (3 - 1)];
→ 두번째 반의 세번째 학생 데이터를 불러오기 위해 위와 같은 연산을 사용자가 직접해야 함
int[,] grades = new int[10, 30] { ... }; // 초기화는 생략하겠습니다.
int grade = grades[1, 2];
→ 배열의 데이터를 30개씩 10세트로 논리적 구분하겠다 선언
→ 따라서 grade[1, 2]라는 간단한 방식을 통해 기본 배열을 통해 접근하기 위해 수행했던 연산이 내부적으로 수행됨
4) 2차원 배열의 초기화
int[,] arr = new int[2, 3]
{
{1, 2, 3},
{4, 5, 6}
};
5) 3차원 배열의 초기화
int[, , ,] arr = new int[2, 2, 3] // [2, 3]의 2차원 배열이 두 층 있다는 개념
{
{
{1, 2, 3},
{4, 5, 6}
},
{
{7, 8, 9},
{10, 11, 12}
}
};
1) 배열의 각 원소가 배열인 배열
2) 즉, 배열의 원소는 다른 배열들의 시작 주소
3) 예시 (int타입의 배열을 원소로 갖는 가변배열)
int[] [] jaggedArray = new int[3][];
4) 가변배열의 원소의 원소에 접근하기
int[][] jaggedArray = new int[3][];
int a = jaggedArray[2][1];
5) 특징