여행을 개발하다

Array(배열) - 1차원 배열의 정적할당 본문

BackEnd/C++

Array(배열) - 1차원 배열의 정적할당

yhtragramming 2019. 5. 9. 15:59

안녕하세요!

 

오늘 포스팅 할 내용은 Array, 배열입니다.

배열이란, 말 그대로 여러 개의 원소의 묶음을 의미하는데요.

어떤 프로그래밍 언어든지 매우 중요하게 다루어지는 부분입니다.

 

그 이유는 배열을 사용해서, 동일한 타입의 변수들을 효율적으로 관리 및 사용할 수 있기 때문입니다.

(참고로 C++에서의 배열은 Java, Python 등 기타 언어에서도 매우 유사하게 사용됩니다.)

 

그 중에서도 오늘은 1차원 배열, 그리고 1차원 배열을 정적할당하는 법에 대해 알아보겠습니다.


1. 배열(Array)이란?

- 동일한 타입의 변수들을 한데 묶어 놓은 것.

- 하나의 배열은 0개 이상의 원소들로 구성되어 있다.

- 각각의 원소들은 각각 고유의 인덱스(index)를 가지며, 배열명과 인덱스로 접근 및 사용이 가능하다.

- 배열의 첫 번째 원소는 1번째가 아닌 0번째 원소이다.

 

예를 들어, Array이라는 이름의 배열이 0, 1, 2, 3, 4 를 요소로 갖고 있다고 가정하겠습니다.

이 때, 총 요소 수는 5가 되겠죠?

여기서 가장 많이 실수하는 부분이 0을 1번째 요소라고 생각한다는 것입니다.

왜냐하면 배열에서의 첫 번째 요소는 반드시 0번째 인덱스를 갖기 때문이죠.

 

여기서 각 요소들은 다음과 같이 나타낼 수 있습니다.

Array[0] = 0, Array[1] = 1, ..., Array[4] = 4

각각의 뜻은 Array의 [0]번째 요소가 0이라는 뜻입니다.

즉, 배열의 이름과 참조하고자 하는 원소의 인덱스 값을 적어주면 해당 원소를 호출할 수 있습니다.

2. 배열의 선언

- 배열을 선언하는 방법은 일반 변수의 선언과 크게 다르지 않지만, 일반적으로 자료형, 배열명, 배열의 크기를 지정하여 선언한다.

- 배열도 일반 변수와 마찬가지로 정의하는 동시에 초기화하는 방법, 정의 후 초기화하는 방법이 있다.

- 선언과 동시에 초기화를 할 경우에는, 배열의 크기를 반드시 입력할 필요가 없다.

- 지정된 배열의 크기를 넘어서는 개수의 초기 값은 넣어줄 수 없다. 하지만 그 반대는 가능하다.

- 초기화에서 제외된 원소의 값은 자동으로 0으로 채워진다.

 

다음 그림은 정수형 변수 5개를 원소를 갖는 youngHoon이라는 배열을 선언한 것입니다.

하지만 각 배열의 인덱스에 어떤 요소가 들어가는지 아직 초기화는 되지는 않았네요.

그럼 해당 배열이 가지고 있는 원소값을 각각 1, 2, 3, 4, 5로 초기화해보겠습니다.

그리고 각각의 요소를 출력해보겠습니다.

 

그 결과, 1, 2, 3, 4, 5가 정상적으로 출력됩니다.

 

부가적으로, 배열을 선언과 동시에 초기화할 경우에는, 배열의 크기를 굳이 입력하는 수고는 하지 않으셔도 됩니다. 즉, 다음과 같이 입력해도 무관하다는 것이죠.

기타 다른 자료형으로 배열을 선언하고 사용할 때도 동일합니다.

예를 들어, 문자로만 이루어진 배열을 선언하기 위해서는 int 대신 char로 입력해주시면 됩니다.

 

이와 같이, 단순히 여러 개의 원소가 단 하나의 배열에 소속되어 있는 경우를 '1차원 배열'이라고 하며, 배열의 크기를 정한 것, 즉 들어갈 변수들의 크기가 어떠할지 메모리 공간을 미리 한정하는 것을 '정적 할당(Static Allocation)'이라고 합니다.

 

반대로, 배열의 크기가 어떻게 될지 모를 경우에는 배열의 크기를 따로 정하지 않고 선언하는데, 이를 '동적 할당(Dynamic Allocation)'이라고 부릅니다.

 

3. 1차원 정적할당 Array의 활용

1차원 정적할당 배열의 활용범위는 무궁무진하지만, 그 중 대표적으로 배열의 원소값을 모두 더한 값을 출력하는 알고리즘을 만들어보겠습니다.

 

먼저 배열은 위에서 이미 선언한 'youngHoon'이라는 배열을 사용하겠습니다.

youngHoon이라는 배열에는 1, 2, 3, 4, 5라는 요소가 이미 들어가 있었죠?

 

그렇다면 합계를 기억할 변수 sum을 미리 선언하고, 동시에 0으로 초기화하는 작업을 하겠습니다.

 

하지만 배열의 원소를 하나하나 호출하여 더하기에는 많은 코딩 작업이 필요하기에,

for문을 사용하여 호출을 반복하겠습니다.

 

그리고 sum이라는 변수에 차례 차례 더해주겠습니다.

 

 

마지막으로 합계를 출력해 본 결과, 15가 정상적으로 출력됩니다.

 

전송중...

사진 설명을 입력하세요.

 

전송중...

사진 설명을 입력하세요.

4. 배열의 크기 구하기 - sizeof()

기타 배열의 크기를 구해주는 'sizeof(변수)'라는 메소드도 있습니다.

sizeof(변수) 메소드는 배열의 크기를 바이트 단위로 구분해서 리턴해주는 메소드입니다.

 

예를 들어, youngHoon 배열의 첫 번째 원소인 1은 정수이므로 4바이트의 크기를 갖습니다.

* sizeof() 메소드의 응용 - 배열의 원소의 개수 구하기

sizeof() 메소드를 응용하면 배열에 속해 있는 원소의 개수도 구할 수 있습니다.

 

방법은 '배열의 크기 / 배열에 속해있는 요소 한 개의 크기'로 해주면 되겠죠?

왜냐하면 요소들은 공통된 자료형을 가지고 있으며,

각각의 요소들은 동일한 메모리 크기를 할당받기 때문이에요.

 

위 방법처럼 실행 결과, youngHoon 배열의 요소의 개수가 5(1,2,3,4,5)로 정상 출력됩니다.

 

 

그렇다면 아까 for문을 사용해서 합계를 출력했던 것도 다음과 같이 바꿀 수 있겠네요.

 

여기서 i를 'sizeof(youngHoon)/sizeof(youngHoon[0]) - 1'까지 반복하는 이유는

배열의 첫 원소 인덱스가 0으로 시작한다는 것과 '<=' 때문에 반복이 0부터 5까지 6번 실행되기 때문이에요.

 

이 방법이 번거로우시면, 다음과 같이 반복하셔도 동일한 결과가 출력됩니다.

 


지금까지 Array(배열), 그 중에서도 1차원 배열과 배열의 정적할당에 대해 알아보았습니다.

 

감사합니다 : )

'BackEnd > C++' 카테고리의 다른 글

Array(배열) - 1차원 배열의 동적할당  (0) 2019.05.09
포인터(Pointer)  (0) 2019.05.09
제어문6. do ~ while문  (0) 2019.05.09
제어문5. while  (0) 2019.05.09
피보나치 수열(Fibonacci Numbers)  (0) 2019.05.08
Comments