본문 바로가기
C++ 독학/[C++ 독학] C++ 배우기

[C++ 독학] 배열 <C++기초> 04

by NpsCause 2022. 3. 31.

배열

 

배열은 같은 타입의 변수를 나열해 놓은 것입니다. 

회사 직원 10명의 아이디를 저장해야 된다고 생각해보면 다음과 같이 변수 10개를 생성해야 합니다.

int id1;
int id2;
int id3;
...
int id10;

이는 굉장히 귀찮은 일입니다. 만약 id가 100개, 1000개가 된다면 변수를 1000개나 생성해야 하는 고역을 겪을 수도 있습니다.

 

우리는 이럴 때 배열을 사용할 수 있습니다. 배열의 선언은 다음과 같습니다.

int myArr[10];

변수와 같이 생성하다가 뒤에 대괄호[] 안에 숫자를 넣은 형태입니다.

직관적으로 봤을 때 10개의 변수를 나열할 수 있도록 배열을 생성해 주었습니다. 이런 배열을 초기화는 다음과 같이 할 수 있습니다.

int myArr[10] = {10,20,30,40,50,60,70,80,90,100};

 

배열에 접근할 때에는 인덱스(index)라는 개념을 사용합니다. 배열의 인덱스는 0번부터 n-1번까지 지정됩니다.

배열의 요소에 접근하는 방법은 다음과 같습니다.

int myArr={10,20,30,40,50,60,70,80,90,100};
cout << myArr[0]; // 10
cout << myArr[1]; // 20

여기서 주의하셔야 할 점은 배열에 접근할 때 범위를 초과해선 안된다는 것입니다.

예를 들어 myArr [11]에 접근한다면 다음과 같은 오류를 볼 수 있습니다.

 

제어문을 활용한 배열 접근

 

1에서 10까지 모든 원소를 더한다고 했을 때 arr[0]+arr[1] . . . arr [9]와 같이 접근하는 건 개발자에게 큰 피로도를 요구합니다.

이렇게 연속된 배열에서 반복문을 사용하면 원소에 쉽게 접근할 수 있습니다.

 

for문을 사용하여 배열에 접근해 보겠습니다.

for(int i = 0; i < 10; i++){
	cout << myArr[i]; 
}​

위 코드는 myArr [0]~myArr [9]까지 cout 해주는 코드입니다. index로 변수를 사용하여 배열에 접근하는 것을 볼 수 있습니다.

 

범위 기반 for문을 사용해서 배열에 접근해보겠습니다.

for(int num : myArr){
	cout << num;
}

범위 기반 for문을 사용하게 되면 myArr의 각 원소를 num이라는 변수에 담아 접근하게 됩니다.

즉, 변수에 직접 접근하는 것이 아닌 변수를 활용해서 접근하는 방식입니다.

 

 

2차원 배열과, 다차원 배열

 

2차원 배열은 배열 안에 배열을 생성하는 것입니다.

쉽게 말해서 x축만 있던 배열이 y축도 갖게 된다고 생각하면 됩니다.

 

2차원 배열의 선언과 초기화는 아래와 같습니다.

int myArr[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} };

배열의 이름 뒤에 [행][열]을 추가해줍니다.

2차원 배열

반복문으로 접근할 때에는 다중 반복문을 사용해야 합니다.

for(int i = 0; i < 3; i++){
 for(int j = 0; j < 4; j++){
    cout << arr[i][j];
 }
}

 

2차원 배열뿐만 아니라 3차원 4차원 등 배열을 계속해서 확장할 수 있습니다. 하지만 배열의 차원이 늘어나면 늘어날수록 복잡해지니 추천드리지는 않습니다.

 

 

배열의 동적 할당

 

배열을 선언할 때 배열의 크기를 명시해주는 대괄호 [] 안에는 오직 상수만 입력할 수 있습니다. 만약 변수를 입력한다고 하면

이와 같은 오류를 볼 수 있습니다.

 

이렇게 변수로 배열의 크기를 지정할 때에 필요한 것이 동적 할당입니다.

동적 할당은 배열이 저장될 메모리와 사이즈를 미리 지정해주어야 합니다. 또 사용한 메모리는 자동으로 사라지지 않기 때문에 개발자가 직접 메모리를 해제해 주어야 합니다.

 

❌동적 할당은 꼭 메모리를 해제해 주어야 합니다.❌

 

동적 할당하고 해제하는 방법을 보겠습니다.

int size = 10; // 사이즈 변수

int* dynamicArr = new int[size]; // 할당

delete[] dynamicArr; // 해제

여기서 int 뒤에 보이는 * 은 포인터라고 하는 개념인데 바로 다음장에서 살펴보겠습니다.

 

 

마치며

지금까지 사용한 배열 이외에도 list, stack, queue, vector 등 c++ 내부에서 제공해 주는 다양한 배열이 있습니다. 

각각의 배열마다 어떻게 사용하냐에 따라 코드를 더 효율적으로 짤 수 있습니다.

 

다음 강의에서는 포인터에 대해서 알아보겠습니다. 감사합니다.

댓글