파일처리

[파일처리] 파일 구조 - Field Structure / Record Structure

서노리 2022. 4. 24. 18:03
반응형

Stream

스트림(stream)이란 데이터, 패킷, 비트 등의 일련의 연속성을 갖는 흐름을 의미한다. 파일은 stream of bytes로 구성되며 스트림을 통해서 입출력 작업을 수행할 수 있다. 하지만 파일에 저장될 때 데이터가 구분이 되지 않는다는 문제가 있고 이를 해결하기 위해서는 필드와 레코드라는 단위로 나누어 데이터를 파일에 저장해야 한다. 

Class Person{
public:
    char LastName[11];
    char FirstName[11];
    char address[16];
    char city[16];
    char state[3];
    char zip[10];
};

Field

필드(field)는 파일을 구성하는 요소 중에서 의미를 갖는 가장 작은 논리적 단위이다. 즉, 파일을 읽고 쓴다는 것은 필드를 읽고 쓴다는 것과 같다. 위의 Person 클래스의 멤버 변수들 각각이 하나의 필드이다. 그러나 물리적인 공간에서 파일은 단순히 바이트의 스트림이기 때문에 각 필드를 구분하기 위한 방법이 필요하다. 

 

※ 필드를 구분하는 방법

  • 고정 길이 필드 방식(Fixed-length fields)
    - 각각의 필드가 고정된 길이를 갖는 방식
    - 장점 : 직관적이고 간단함
    - 단점 : 공간 낭비

 

  • 가변 길이 필드 방식 1 - 길이 지시자 방식(Fields with Length indicator)
    - 필드에 필드의 길이를 따로 추가하여 데이터와 함께 저장
    - 장점 : 직관적이고 간단함
    - 단점 : 각 필드의 크기가 커짐

 

  • 가변 길이 필드 방식2 - 구분자 방식(Separate Fields with Delimiters)
    - 각각의 필드를 특정한 구분자로 구분하는 방식
    - 장점 : 각 필드의 크기에 영향이 없음
    - 단점 : 구분자가 데이터에 포함되지 않도록 해주어야 함

 

  • 가변 길이 필드 방식 3 - 키워드 = 값 방식("keyword = value" expression)
    - 각각의 필드를 구분자로 구분하고, 하나의 필드에 키워드와 값을 같이 저장하는 방식
    - 장점 : 누락된 필드가 있어도 데이터의 필드를 혼돈하지 않고 읽어낼 수 있음
    - 단점 : 키워드를 같이 저장하기 때문에 공간 낭비

 


Record

레코드(record)는 필드의 집합을 의미한다. Person 클래스의 멤버 변수들로 구성된 하나의 Person 객체를 레코드라고 할 수 있다. 레코드 또한 필드처럼 각 레코드를 구분하기 위한 방법이 필요하다.

 

※ 레코드를 구분하는 방법

  • 고정 길이 레코드 방식(Fixed-length Records)
    - 레코드의 길이를 고정하는 방식
    - 단점 : 공간 낭비

 

  • 가변 길이 레코드 방식 1 - 필드 개수 지정 방식(Records with predictable number of fields)
    - 각각의 레코드가 고정된 개수의 필드로 구성
    - 일정한 개수의 필드를 읽으면 하나의 레코드를 읽었다고 인식
    - 파일의 header 부분에 각 레코드의 필드의 개수를 저장해둠

 

 

  • 가변 길이 레코드 방식 2 - 길이 지시자 방식(Records with a Length Indicator)
    - 레코드에 레코드 길이를 포함하여 저장하는 방식

 

 

  • 가변 길이 레코드 방식 3 - 인덱스 파일 방식(Using index file)
    - 각 레코드의 시작 주소를 저장하는 인덱스 파일을 따로 만들어 레코드에 접근하는 방식
    - 파일을 하나 더 유지해야 한다는 단점이 있지만 많은 강점이 있어 자주 사용

 

 

  • 가변 길이 레코드 방식 4 - 구분자 방식(Delimiter at the End of each Record)
    - 구분자를 이용하여 레코드를 구분하는 방식
    - 필드에도 구분자를 사용하는 경우 이와는 다른 구분자를 사용하여야 함
    - 구분자가 데이터에 포함되지 않도록 해주어야 함

 


 

반응형