Array (배열)
우리가 힘들게 프로그램을 만드는 이유는 많은 데이터를 빨리 처리할 수 있기 때문입니다. 단, 많은 양의 데이터를 메모리에 저장하는 방법이 필요한데 이때 배열을 사용합니다. 배열을 만들고 사용하는 방법, 또 배열이 문자열을 어떻게 저장하는지 살펴봅니다.
동일한 자료형을 저장할 저장 공간이 많이 필요한 경우 일일이 변수를 선언하는 일은 만만치 않습니다. 이때 '배열'을 사용하는데, 배열을 사용하면 많은 변수를 하나의 선언문으로 간단하게 대체할 수 있습니다. 배열을 만들고 사용하는 방법에 대해 알아보겠습니다.
FIFA에서 만든 축구 게임, FIFA 21에서 홈페이지에 게시되어 있는 FIFA 21 Ratings 중 한 선수의 데이터를 통해 배열을 사용하는 방법을 알아보도록 하겠습니다.
이 중, 손흥민 선수의 능력치를 확인해보면 아래 그림-1과 같습니다.
손흥민의 주요 능력치를 C 언어를 활용하여 데이터로 나타내면 아래처럼 표현할 수 있습니다.
int pac, sho, pas, dri, def, phy;
이렇게 변수를 하나씩 따로따로 선언하면 능력치도 일일이 하나씩 넣어줘야 합니다.
즉, 변수명이 별도로 있기 때문에 반복문 사용이 불가능합니다.
그래서 같은 형태의 많은 데이터를 반복문으로 처리하기 위해서 메모리에 연속적으로 저장해놓고 쪼개서 사용하는 방법이 효율적입니다. 이를 배열이라고 합니다.
배열의 정의
배열이란 동일한 Data Type을 메모리상에 순차적으로 확보한 구조입니다.
배열의 선언
배열을 선언할 때는 변수를 선언하는 것과 크게 다르지 않습니다. 선언 시 배열의 요소(배열로 선언된 하나의 저장 공간을 요소라고 합니다)의 개수를 대괄호([ ])에 정의합니다.
// DataType 배열명[개수];
int stat[6];
배열의 선언 및 초기화
초기화(Initialization)란 값을 넣는 행위입니다. 배열을 한꺼번에 초기화하는 것은 선언할 때 최초 한 번만 가능합니다.
// 순서대로 pac, sho, pas, dri, def, phy 값을 넣겠다고 정의
int stat[6] = { 88, 86, 80, 87, 43, 69 };
배열의 사용
배열도 데이터를 저장하는 구조이기 때문에 앞서 배운 변수와 마찬가지로 선언 후 사용하면 됩니다. 방법은 딱 한 가지만 제외하고 변수와 똑같습니다.
Loop와의 콜라보
앞으로 코딩을 배우면서 컴퓨터 용어에 대한 정리는 대단히 중요한 습관 중 하나입니다. 제가 오프라인에서 항상 말하는 게 컴퓨터 용어는 말 그대로 영어가 아니라 용어입니다. 웬만하면 영어 용어를 머리에 기억하려고 노력해봅시다. Loop란 제어문 중 반복문을 말합니다.
배열의 선언과 사용 예제
#include <stdio.h>
void work_with_an_array()
{
int ratings[7];
int overall, index, count;
printf("> Enter vardy's overall: ");
scanf("%d", &overall);
ratings[0] = overall--;
ratings[1] = 88;
ratings[2] = overall;
ratings[3] = 66; ratings[4] = 79;
ratings[5] = 55;
ratings[6] =
ratings[0] - 10;
count = sizeof(ratings) / sizeof(ratings[0]);
puts("> Jamie Richard Vardy");
puts("---------------------------------------------------");
puts("OVR\tPAC\tSHO\tPAS\tDRI\tDEF\tPHY");
for (index = 0; index < count; ++index) {
printf("%3d", ratings[index]);
printf("\t");
}
puts("\n---------------------------------------------------");
}
int main()
{
work_with_an_array();
return 0;
}
평소 마음에 드는 축구 선수 한 명을 검색해서 예제를 조금씩 변형해보세요.
배열의 특징
배열을 다룰 때 유용한 특징들이 몇 가지 있는데, 기억해두도록 합시다.
- 배열에서 대괄호 안에 들어가는 숫자가 의미하는 것이 다르다.
- 배열을 선언할 때는 요소의 개수를 의미
- 배열을 사용할 때는 상대적인 위치를 의미
- 배열명은 그 자체로 시작 주소를 말한다.
- 배열명은 포인터 상수다.