C에서 순서가 없고 이질적인 데이터들의 모임을 구조체(structure)라
한다. 컴퓨터 과학에서는, 이러한 데이터들의 모임을 보다 일반적으로 레코드(record)라
부른다.
레코드의 개념을 이해하기 위해서, 학생들의 성적 리스트를 생각해보자. 이러한 리스트에는 학생들의
이름, 학번, 한 학기 성적, 학점 등과 같은 여러 정보가 포함될 수 있다. 이러한 정보들이 모여서 학생들의 성적 레코드를 구성한다.
성적 레코드가 어떻게 정의되는가? 먼저, 학생들의 성적 리스트는 다음과 같은 테이블 형태로 표현할
수 있다.
<표 14-1> 학생들의 성적 리스트
이름
학번
평균성적
학점
홍길동
20021126
95.7
A
이도령
20021125
87.2
B
위의 테이블에서 각 행을 한 개의 레코드로 생각할 수 있다. 따라서 위의 테이블은 2개의 성적 레코드를
포함한다.
각 레코드는 개별적인 정보를 나타내는 구성 요소로 나뉘어질 수 있다. 이러한 구성 요소를 레코드의 필드(field)
혹은 멤버(member)라고 부른다. 예를 들면, 학생 레코드는
이름, 학번, 평균성적, 학점 등 모두 4개의 구성 요소 즉, 필드들로 구성된다.
레코드의 각 필드는 포함하는 값에 따라서 그 타입이 연관된다. 예를 들면, 위의 성적 레코드에서 이름 필드의 값은 문자열이다.
따라서 이름 필드의 타입은 문자열을 표현하기 위한 문자 배열을 연관시킨다. 학번은 정수로 표현될 수 있으므로, int
타입을 연관시킨다. 마찬가지로, 평균성적은 실수로 표현되고, 학점은 문자로 표현되므로, 각각 double과 char을
연관시킨다.
레코드는 여러 개의 필드들로 구성되지만, 한 개의 단위로 취급된다. 예들 들면, 학생 성적 리스트 테이블에서, 첫 번째 행에
포함된 필드 전체가 홍길동의 성적 레코드를 나타내고, 두 번째 행도 그 전체가 이도령의 성적 레코드를 나타낸다. 이러한 레코드는
프로그램 상에서 한 개의 단위로서 표현되고, 취급될 수 있다.
여러분이 10주차 강의에서 배운
배열도 여러 개의 데이터를 그룹하여 한 단위로 취급하였다. 배열에서는 데이터들 간에 순서가 주어지며, 따라서 인덱스를 사용하여
데이터가 선택될 수 있었다. 또한 모든 데이터들의 타입은 동일해야 한다는 제약 사항이 있었다.
레코드가 관련 있는 여러 개의 데이터를 그룹하여 한 단위로 취급할 수 있게 한다는 점에서는 배열과
동일하다. 그러나 다음 점에서 배열과 다르다. 첫째, 레코드를 구성하는 데이터들간에, 즉 필드들 간에는 순서가 고려되지 않는다.
둘째, 앞서 살펴보았듯이, 데이터들의 타입은 모두 서로 다를 수 있다.
여러분이 프로그램 상에서 데이터 구조를 다룰 때, 그 구조를 어떻게 표현할 것인가? 데이터 구조의 구성 데이터들간에 순서가 있고,
동질적이면 배열로 표현하고, 그렇지 않으면 레코드로 표현하는 것이 적합하다는 것을 알 수 있다. 특히, 데이터들간에 순서가 고려되지
않으면, 데이터들이 우연히 동질적인 경우에도 레코드로 선언하는 것이 바람직하다.