배열(array)이란 단어를 들었을 때 무엇이 생각나는가? 무엇인가를 순서대로 배열하다?
너무 단어에 의미를 두지 말자. 배열을 정의하면 확 이해가 와 닿지 않기 때문에 정의 대신 설명으로 대체하겠다.
100명의 학생 이름을 저장하기 위한 변수를 선언한다고 하자.
string student1;
string student2;
string student3;
string student4;
...
string student100;
보통 한 코드 파일의 길이는 100줄 내외이다. 기능이 많을 경우 1000줄이 넘을 수 있지만 변수 선언만으로 100줄을 차지하는 것은 너무하지 않는가? 심지어 변수에 값을 넣는 것도 100줄이 필요하다.
student1 = "철수";
student2 = "짱구";
...
student100 = "영희";
하지만 배열을 이용한다면 단 한 줄로 변수를 선언할 수 있다.
string student[100];
그리고 다음과 같이 사용하면 된다.
student[0] = "철수"
student[1] = "짱구"
...
student[99] = "영희"
무엇인가 이상하다고 느꼈는가" 배열은 1이 아닌 0부터 시작한다.
이유가 무엇일까? 컴퓨터를 영어로 하면 전자계산기이다. 즉 수를 계산하는 기계이다. 수학의 기준은 1이 아니라 0이기 때문에 0부터 시작한다고 생각하자. 1의 반대는 -1이 있다. 하지만 0의 반대가 있는가? 없다 왜냐하면 0이 기준이기 때문이다.
위처럼 코드를 사용하면 에러가 발생할 것이다. string 배열은 각 문자열의 길이가 얼마인지 모르기 때문에 선언과 동시에 초기화를 시켜주어야만 한다. 아래 방식을 사용하자.
변수는 선언과 동시에 초기화를 할 수 있다.
string student1 = "철수";
그렇다면 배열도 선언과 동시에 초기화할 수 있을까? 이런 식으로 선언과 동시에 초기화해주면 된다.
string student[] = { "철수", "짱구", ... "영희" };
굳이 string student[100]이라고 입력 안 하고 string student[]라고 해도 된다.
개수가 너무 많아지면 일일이 셀 수 없지 않은가? 알아서 개수만큼 초기화해준다. 걱정하지 말자.
cout << student[1] << endl;을 출력하면 무엇이 출력될까?
철수 일까? 아니다 배열은 0부터 시작하기 때문에 짱구가 출력될 것이다.