들어가기 전에
우리가 특정 자료형의 변수를 선언하면 이는 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 만약 비슷한 종류의 값을 모아서 저장하고 싶다면 어떻게 해야 할까요? 메모리상에서 여러 값을 연이어서 저장하고 사용하는 방법과 그 이점을 알아보겠습니다.
학습 목표
배열을 정의하고 사용하는 방법을 설명할 수 있습니다
핵심 단어
- 배열
강의 듣기
들어가기 전에
우리가 특정 자료형의 변수를 선언하면 이는 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 만약 비슷한 종류의 값을 모아서 저장하고 싶다면 어떻게 해야 할까요? 메모리상에서 여러 값을 연이어서 저장하고 사용하는 방법과 그 이점을 알아보겠습니다.
학습 목표
배열을 정의하고 사용하는 방법을 설명할 수 있습니다
핵심 단어
강의 듣기
메모리
C에는 아래와 같은 여러 자료형이 있고, 각각의 자료형은 서로 다른 크기의 메모리를 차지합니다.
컴퓨터 안에는 아래 사진과 같은 RAM 이라고 하는 물리적 칩이 메모리 역할을 합니다.
쉽게 생각하면 아래 사진에서 여러 개의 노란색 사각형이 메모리를 의미하고, 작은 사각형 하나가 1바이트를 의미한다고 볼 수 있습니다.
예를 들어 char 타입의 변수를 하나 생성하고, 그 값을 입력한다고 하면 위 사진에서 한 사각형 안에 그 변수의 값이 저장되는 것이죠.
배열
아래와 같이 세 개의 점수를 저장하고 그 평균을 출력하는 프로그램이 있습니다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// Scores
int score1 = 72;
int score2 = 73;
int score3 = 33;
// Print average
printf("Average: %i\n", (score1 + score2 + score3) / 3);
}
만약 점수의 개수가 더 많아진다면 이 프로그램은 많은 부분을 수정해줘야 합니다.
이 때 활용할 수 있는 것이 배열의 개념입니다.
배열은 같은 자료형의 데이터를 메모리상에 연이어서 저장하고 이를 하나의 변수로 관리하기 위해 사용됩니다.
위 코드는 배열을 이용하면 아래와 같이 바꿀 수 있습니다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// Scores
int scores[3];
scores[0] = 72;
scores[1] = 73;
scores[2] = 33;
// Print average
printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / 3);
}
int scores[3]; 이라는 코드는 int 자료형을 가지는 크기 3의 배열을 scores 라는 이름으로 생성하겠다는 의미입니다.
배열의 인덱스는 0부터 시작하기 때문에, scores의 인덱스는 0, 1, 2 세 개가 있습니다.
이 인덱스를 변수명 뒤 대괄호 [ ] 사이에 입력하여 배열의 원하는 위치에 원하는 값을 저장하고 불러올 수 있습니다.
하지만 위와 같은 코드는 여전히 점수의 개수가 바뀌는 상황에서 제약이 많습니다.
다음 강의에서는 배열을 보다 동적으로 선언하고 저장하는 방법을 알아보겠습니다.
생각해보기
실생활의 어떤 데이터를 배열로 표현할 수 있을까요?
comment
책장 책 번호를 순서적으로 정리할 때 배열을 사용하면 좋을 것 같습니다.
학번
마트 진열 목록
수강과목의 성적
음료수 종류 당 칼로리의 수
학번이나 수험번호 같은 한 종류의 데이터를 나타낼때
여러 사람들의 같은 항목의 정보들을 나열해야 할 때 배열로 표현할 수 있습니다
주식 하루하루의 최종값을 기록할때 좋을 것 같습니다.
키나 몸무게 같은 단순하지만 같은 가치를 갖는 값들?
상품명, 가격과 같이 목록을 작성해서 관리할 수 있는 데이터들
리스트화 할 수 있는 데이터들
성격이 같은 데이터들을 일렬로 묶을 때 사용할 수 있다.
bool: 각 수험생들의 시험 합격여부 (T, F, F, T ...)
char: 시험의 응시유형 (A, B, C ...)
int: 각 수험생들의 시험 점수 (85, 100, 65, 75 ...)
float: 시험 점수 가산점 (1.0, 0.5, 1.5 ..)
string : 수험생들의 이름 (김.., 서.., 조..)
같은 종류의 자료형을 목록으로 모아놓고 싶을때 사용한다.
점수(int), A부터 Z까지의 문자(char), 영화목록(String), 기록(float)
학생들의 점수, 학생들의 이름 등 일관된 형태의 다수의 값을 저장할 때
한 학급의 학생 이름 목록
성적, 카페메뉴, 상품가격, 회원명단 등
실생활의 어떤 데이터를 배열로 표현할 수 있을까요?
시험 점수, 가계부의 동일 항목 내의 증감, 학번 등
학생 성적, 상품 목록, 주소록 등
자식들의 이름
발주 목록 상품와 발주 목록 상품의 개수