제 4 장 Record
레코드(Record)의 개요 레코드(Record) idNo name sex 논리적으로 밀접한 관계를 유지하는 여러 데이타 원소들을 서로 다른 데이타 형태와 크기로 구성해야 할 경우의 자료 구조 하나 이상의 필드(field)로 구성 이질적(heterogeneous) 데이타 구조 예) 학번(idNo), 이름(name), 성별(sex) 필드 갖는 Student 레코드 Student idNo name sex
레코드(Record)의 정의 (1/2) 정보 구성 단위의 계층 문자 화일 필드 데이터 베이스 레코드
레코드(Record)의 정의 (2/2) 필드 레코드 의미 있는 연속된 문자를 기억 시키는데 필요한 몇 개의 바이트들의 묶음 서로 관계 있는 여러 필드를 한 개의 조로 묶어서 구성한 데이타 구조 일반적으로 보조 기억 장치에서의 입출력 단위로 사용
배열과 레코드의 차이점 배열 레코드 데이타 원소의 크기와 데이타 형이 동일하다(Homogeneous) 첨자를 이용하여 원소를 참조(reference) 예)item[k] 레코드 데이타 원소의 크기와 데이타 형이 서로 다르다(Heterogeneous) 필드를 이용하여 원소를 참조 예) Student.idNo
레코드의 표현 - 고정 길이 레코드 (1/2) 레코드의 가장 단순한 표현 방법 각 레코드에 대하여 일정 크기의 기억 공간을 할당 단점 레코드 삭제가 어려움 레코드의 이동을 요구 블록의 크기가 일정 크기의 정수배가 아닐 경우 부가적 블록 액세스를 요구
레코드의 표현 - 고정 길이 레코드 (2/2) 예) 예금 레코드 branch Name account Number customer Name balance 레코드 0 레코드 1 레코드 2 레코드 3 레코드 4 레코드 5 20바이트 4바이트 20바이트 4바이트
레코드의 표현 - 가변 길이 레코드 가변 길이 레코드가 필요한 경우 가변 길이 레코드의 구현 방법 한 화일 내에 여러 유형의 레코드 저장 한 화일 내에 가변 필드를 허용하는 레코드 저장 반복적 필드를 허용하는 레코드의 저장 가변 길이 레코드의 구현 방법 바이트 스트링 표현 고정 길이 레코드 이용
가변 길이 레코드의 표현 - 바이트 스트링 표현 (1/2) 가장 단순한 방법 각 레코드의 끝에 레코드 끝 기호( )를 첨가 단점 삭제된 레코드의 기억 장소를 재사용하기 어렵다 일반적으로 크기가 증가하는 레코드에 대해서는 기억 장소를 할당하기 어렵다.
가변 길이 레코드의 표현 - 바이트 스트링 표현 (2/2) 예) 1 2 3 4
고정 길이 레코드의 이용- 예약 기억 장소 기법(1/2) 화일내의 최대 레코드 길이 만큼의 고정 레코드를 사용 사용되지 않는 기억 장소 의미 없는 값으로 채워진다 레코드 끝 기호로 채워진다 단점 대부분의 레코드 길이가 최대치와 근사하지 않을 경우 기억 장소가 낭비된다
고정 길이 레코드의 이용- 예약 기억 장소 기법(2/2) 예)
고정 길이 레코드의 이용- 포인터 기법(1/2) 포인터를 통하여 연결되는 고정 길이 레코드의 리스트로 가변 길이 레코드를 표현한다. 포인터 필드를 첨가한다. 예)
고정 길이 레코드의 이용- 포인터 기법(2/2) 단점 해결 방법 기억장소 확보 양을 예측하기 어렵다. 기본블록과 오버플로 블록으로 구분 관리
C 언어에서의 레코드 (1/3) 레코드의 선언 구조체 데이타형태를 선언 struct 구조체 선언명{ member 1의 선언; … member n의 선언; }
C 언어에서의 레코드 (2/3) 레코드 필드의 참조 참조 연산자 “ . ”를 사용 예) person.number = 1; person.name = “Kim, SungSuk”; person.address = “Seoul Sungbuk-Gu”; person.tel = “123-3456”; person.sex = 0;
C 언어에서의 레코드 (3/3) 레코드 배열 배열의 각 원소가 레코드 원소로 구성된 경우 예) struct Jusorok { int number; String name[20]; String address[100]; String tel[13]; int sex; } struct Jusorok person[100]; person [0] [2] … [98] [99] [100]