[ 배열 생성 ]
string food = "치킨";
food = "피자"; //데이터 대체 → 출력결과: 피자
string food = "떡볶이"; //중복 변수명 → 오류
food 변수를 생성하고 치킨을 저장했다. 여기에 추가로 데이터를 저장하고 싶어서 피자를 입력했다. 하지만 food 변수에는 치킨과 피자 둘 다 저장되는 것이 아니라, 피자가 기존의 치킨 데이터를 대체하여 피자만 저장된다. 또한 떡볶이를 추가로 저장하고 싶어서 food라는 동일한 변수명으로 변수를 새로 생성하게 되면 오류가 발생하게 된다.
이처럼 한 변수에 다양한 데이터를 저장하고 싶을 때는 배열이라는 기능을 사용한다.
string[] name; //string 배열
int[] age; //int 배열
배열을 사용하려면 데이터 형식 뒤에 대괄호([ ])를 입력해주면 된다. 그러면 한 변수 내에 다양한 데이터를 저장할 수 있는 기능이 주어진다.
string[] name = new string[4];
int[] age;
age = new int[4];
대괄호 안에는 몇 개의 데이터를 저장할지 개수를 지정해준다. 배열을 생성할 때는 new라는 키워드를 이용한다.
첫 번째 줄처럼 변수를 생성하고 바로 배열을 생성할 수도 있고, 두 번째 줄처럼 변수만 먼저 생성한 뒤 나중에 배열을 생성할 수도 있다.
string[] game = new string[3];
Console.WriteLine(game[0]); //(아무 것도 나타나지 않음)
int[] age = new int[3];
Console.WriteLine(age[0]); //0
bool[] or = new bool[3];
Console.WriteLine(or[0]); //False
각 요소에 데이터가 저장되지 않은 상태라면, 기본값이 들어가게 된다.
문자는 "", 숫자는 0, 불리언은 False가 기본값이다.
[ 인덱스 ]
배열의 요소에 저장하기 전 알아야 할 기초 개념이 있는데, 각 요소의 위치를 나타내는 숫자를 인덱스라고 한다.
일반적으로 맨 처음을 1부터 세는 것과는 다르게, 프로그래밍 언어에서는 0이 시작이 된다. 따라서 0번 인덱스는 첫 번째 요소를 나타내고, 1번 인덱스는 두 번째 요소를 나타내는 것이다.
[ 데이터 저장 ]
string[] game = new string[3];
game[0] = "스타듀 밸리";
game[1] = "호그와트 레거시";
game[2] = "사이버펑크";
배열에 데이터를 저장하는 방법은 인덱스를 이용해 대괄호 안에 숫자를 적어 저장할 위치를 지정한다.
주의할 점은 new string[3]의 3은 단순 정수로써 크기가 3인 배열을 생성한 것이고, game[2]의 2는 배열의 2번 인덱스를 나타내는 것이므로 두 숫자가 의미하는 것은 다르다.
따라서 new string[3]이라고 해서 game[3]까지 존재하는 것이 아니며, 해당 인덱스 요소에 데이터를 저장하거나 접근하려고 하면 오류가 발생한다.
[ 배열 리터럴 ]
string[] game = new string[] {"스타듀 밸리", "호그와트 레거시", "사이버펑크" };.
string[] game = new string[3] {"스타듀 밸리", "호그와트 레거시", "사이버펑크" };
string[] game = {"스타듀 밸리", "호그와트 레거시", "사이버펑크" };
Console.WriteLine(game[0]); //스타듀 밸리
Console.WriteLine(game[1]); //호그와트 레거시
Console.WriteLine(game[2]); //사이버펑크
또는 배열 리터럴을 통해 배열을 생성함과 동시에 초기화를 하는 방법도 있다. 배열 리터럴은 중괄호({ })를 사용해서 각 요소에 저장하고 싶은 데이터를 쉼표로 구분하여 나열한다.
위 3가지의 코드 모두 동일하게 작동한다. 이처럼 배열 리터럴을 사용하면 new string[]의 대괄호 안에 크기를 지정하지 않거나 배열 타입 자체를 작성하지 않아도, 배열 리터럴을 통해 자동으로 추론하여 요소에 데이터를 저장할 수 있다. 따라서 new string[]을 생략해서 간단하게 작성도 가능하다.
[ 배열 접근 ]
현재 game 배열을 이미지로 나타내면 다음과 같다.
string[] game = new string[3];
game[0] = "스타듀 밸리";
game[1] = "호그와트 레거시";
game[2] = "사이버펑크";
Console.WriteLine(game[0]); //스타듀 밸리
Console.WriteLine(game[1]); //호그와트 레거시
Console.WriteLine(game[2]); //사이버펑크
배열에 저장된 데이터를 활용하고 싶다면, 변수 뒤에 똑같이 대괄호와 인덱스를 사용하면 된다.
예를 들어 0번 인덱스의 스타듀 밸리를 출력할 때는 game[0]을 입력하면 된다.
배열의 특정 인덱스에 저장된 데이터를 읽거나 사용하는 것을 '접근한다'고 한다.
하지만 크기를 넘어선 인덱스에 접근하게 되면 에러가 발생한다.
예를 들어 크기가 4인 배열의 4번 인덱스에 접근하려고 하면, 4번 인덱스는 다섯 번째 요소이므로 존재하지 않는 데이터라 에러가 난다.
[ 활용 범위 ]
string[] name = new string[3];
name[0] = "김서영"; //string 타입에 string 데이터 저장 → 정상
name[1] = 22; //string 타입에 int 데이터 저장 → 오류
name[2] = 9.10; //string 타입에 float 데이터 저장 → 오류
배열은 문자열 뿐만 아니라 대부분의 데이터 형식에서 사용할 수 있다.
다만 배열의 데이터 형식과 저장하려는 데이터의 형식이 일치하지 않는다면 오류가 발생한다.
[ 배열 & 반복문 ]
int[] age = new int[4];
for(int i = 0; i < 4; i++)
{
age[i] = 20 + i;
Console.WriteLine(age[i]);
}
//실행결과
20
21
22
23
배열과 반복문을 결합해서 활용할 수도 있다.
크기가 4인 배열 age를 생성하고, 0부터 시작해서 4 미만까지 1씩 증가하는 반복문을 만들어 준다.
i가 0일 때, age[0] = 20 + 0이 돼서, 0번 인덱스 요소에는 20이 저장된다.
i가 1일 때, age[1] = 20 + 1이 돼서, 1번 인덱스 요소에는 21이 저장된다.
다음과 같은 과정을 i가 3일 때까지 반복하고, 4부터는 조건이 일치하지 않으므로 반복문을 종료한다.
'Coding > C#' 카테고리의 다른 글
[내일배움캠프 7일차 TIL] 배열, 컬렉션, 메서드, 구조체, 조건문, 반복문 (0) | 2024.04.23 |
---|---|
[내일배움캠프 6일차 TIL] C#, 객체 지향, 변수, 자료형, 형변환 (0) | 2024.04.22 |
C# 반복문 연습 문제 (0) | 2024.04.13 |
C# 반복문 for, while, do while, break, continue (0) | 2024.04.13 |
C# 조건문 연습 문제 (0) | 2024.04.13 |