서론
이름 하나로 데이터 여러 개를 담을 수 있는 그릇을 컬렉션(collection) 혹은 시퀀스(sequence)라고 한다. C#에서 컬렉션은 배열(array), 리스트(list), 사전(dictionary) 등이 있다. 그중에서 많이 활용되는 배열에 대해 깊이 알아보자.
# 배열
var array = new string[] {"Array", "List", "Dictionary"};
foreach (var arr in array) {Console.WriteLine(arr);}
# 리스트
var list = new List<string> {"Array", "List", "Dictionary"};
foreach (var item in list) {Console.WriteLine(item);}
# 딕셔너리
var dictionary = new Dictionary{{ 0,"Array"}, {1, "List"}, {2, "Dictionary"}};
foreach (var pair in dictionary) {Console.WriteLine(pair);}
배열
배열(이름 하나로 같은 데이터 형식을 여러 개 보관해 놓는 그릇)은 동일한 데이터 형식을 갖는 데이터의 집합체를 의미한다. 배열을 사용하면 데이터를 모아서 편하게 관리할 수 있다. 배열의 핵심적인 특징은 다음과 같다.
- 변수 하나에 값 하나만 저장할 수 있는 변수와 달리 배열에는 배열 이름 하나에 데이터 여러개를 보관할 수 있다. 이처럼 변수 여러 개를 하나로 관리하는 것을 배열이라고 한다.
- 배열은 요소들의 순서 있는 집합이다. 각 요소는 인덱스로 접근할 수 있으며, 인덱스는 0부터 시작한다.
- 배열 하나에는 데이터 형식(정수형 배열, 문자열 배열 등) 하나만 보관할 수 있다.
- 배열은 메모리의 연속된 공간을 미리 할당하고, 이를 대괄호 "[]"와 0부터 시작하는 정수형 인덱스를 사용하여 접근하는 구조이다.
- 배열을 선언할 때는 new 키워드로 배열을 생성한 후 사용할 수 있다.
- 배열에서 값 하나는 요소(element) 또는 항목(item)으로 표현한다.
배열을 사용하면 다음과 같은 장점들이 있다.
- 이름 하나로 변수 여러 개를 묶어 관리하기 편하다.
- 반복문으로 쉽게 반복해서 값을 사용할 수 있다.
- 필요한 데이터 개수를 정확히 정한다면 메모리를 적게 사용하여 프로그램 크기가 작아지고 성능이 향상된다.
배열 선언
배열은 데이터 형식 이름 뒤에 "[]" 기호를 사용하여 선언한다. 배열에 저장된 데이터는 정수형 인덱스로 접근 가능하다. 배열에 있는 데이터는 for 문 또는 foreach 문을 사용하여 반복해서 출력할 수 있다.
type [] name;
# 배열 요소의 데이터 유형 + 배열의 차수 기록 + 배열 변수의 이름 기록
선언 이후에는 new 키워드를 이용해서 배열의 크기를 지정할 수도 있고, 한번에 선언과 초기화를 할 수 있다.
# 선언과 초기화 따로하기
type [] name;
name = new type[size];
# 선언과 초기화 같이 하기
type [] name = new type[size];
# 선언과 초기화 따로 하기
int[] numbers;
numbers = new int[3];
# 선언과 초기화 같이 하기
int[] numbers = new int[3];
1차원 배열
1차원 배열은 선언하여 메모리 영역을 확보하는 코드 형태는 윗 예시와 같다. 또한 불러오는 방식도 동일하다. 단, C#에서는 모든 배열과 같은 데이터 구조(문자열)는 인덱스는 0부터 시작한다.
모든 배열과 같은 데이터 구조는 인덱스는 0부터 시작하는 것을 (n - 1) 규칙, 0 기반(zero base), 제로 오프셋(zero offset)라고 한다.
# 선언
type[] name;
# 호출
name[index] = value;
# 선언과 초기화 따로 하기
int[] intArray;
intArray = new int[3]
intArray[0] = 1;
intArray[1] = 2;
intArray[2] = 3;
# 선언과 초기화 같이 하기
int[] intArray = new int[3] {1, 2, 3};
# 선언과 초기화를 같이 할 시 요소 개수 생략할 수 있다.
var intArray = new int[] {1, 2, 3}; # var키워드로 배열 대체 가능
다차원 배열
차원이 2차원 이상인 배열을 다차원 배열이라고 한다. 차원은 자신이 원하는 차원 수 만큼 ","를 추가하면 다차원 배열을 선언할 수 있다. 호출할 때도 만찬가지이다.
# 선언
type[,] name; # 2차원
type[,,] name; # 3차원
# 호출
name[index, index] = value; # 2차원
name[index, index, index] = value; # 3차원
# 선언과 초기화 따로 하기
int[,] intArray;
intArray = new int[2,3]
intArray[0, 0] = 1;
intArray[0, 1] = 2;
intArray[0, 2] = 3;
intArray[1, 0] = 1;
intArray[1, 1] = 2;
intArray[1, 2] = 3;
# 선언과 초기화 같이 하기
int[,] intArray = new int[2, 3] {{1, 2, 3}, {4, 5, 6}};
# 선언과 초기화 같이 하기 방법 2
int[] intArray =
{
{1, 2, 3},
{4, 5, 6}
}
가변 배열
배열 길이가 가변 길이인 배열은 가변 배열이라고 한다. 지그재그 형태의 배열이며, 다차원과 다르게 대괄호 "[]"로 구분한다.
# 선언과 초기화
type[][] name = new type[size][]; # 2차원이되 각 1차원의 크기는 미정
# 차원마다 초기화
name[index] = new type[] {value};
name[index] = new type[] {value};
int[][] zagArray = new int[size][];
zagArray[0] = new int[] {1, 2};
zagArray[1] = new int[] {3, 4, 5};
배열 관련 메서드
Rank, Length, GetLength()
- Rank 속성을 사용하면 배열의 차수를 알 수 있다. 만약 3차원 배열이면 3을 반환한다.
- Length 속성은 배열의 크기(길이)를 알 수 있다.
- 주의할점으로 마지막 인덱스와 배열의 크기는 같지 않다. 왜냐하면 인덱스는 0부터 n-1까지 배열에 맵핑되지만 길이는 n마큼이기 때문이다.
- GetLength() 메서드를 이용하면 각 차수에 해당하는 길이를 알 수 있다. 즉, GetLength(0)은 1차원의 Length를, GetLength(1)은 2차원의 Length를, GetLength(2)은 3차원의 Length를 구할 수 있다.
주섬주섬
var 키워드를 사용하면 자동으로 저장되는 값을 유추하여 해당 형식으로 초기화한다.
참고
'프로그래밍 언어 > C#' 카테고리의 다른 글
C# 7. 닷넷 API (0) | 2024.05.09 |
---|---|
C# 6. 함수 (0) | 2024.03.10 |
C# 4. 제어문 (1) | 2024.02.27 |
C# 3. 변수와 입력문 (1) | 2023.10.04 |
C# 2. 출력문 (0) | 2023.09.10 |
댓글