본문 바로가기
프로그래밍 언어/C#

C# 5. 배열

by Jinger 2024. 3. 2.

서론

    이름 하나로 데이터 여러 개를 담을 수 있는 그릇을 컬렉션(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# 3. 변수와 입력문

서론 C# 프로그래밍에서 변수와 입력문은 중요한 개념으로, 변수는 데이터를 저장하고 처리하는 데 사용되며, 입력문은 프로그램 사용자로부터 데이터를 입력받는 데 도움이 된다. 변수와 입력

jinger.tistory.com

 

반응형

'프로그래밍 언어 > 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

댓글