본문 바로가기

객체지향설계20

[파일구조] - 파일과 소프트웨어 1. 추상 데이터 모델(Abstract Data Model) 음악, 이미지, 문서, 설정파일 등의 파일은 레코드와 필드의 집합이라는 개념에서 해석하기에는 다소 맞지 않는 부분이 존재한다. 음악, 이미지, 문서, 설정파일 등과 같은 파일을 레코드와 필드의 집합이 아니라 하나의 객체로 정의하기 위한 개념이 추상 데이터 모델(abstract data model)이다. 추상 데이터 모델은 데이터에 대한 개념적인 정의로써, 데이터 모델 자체에 데이터뿐만 아니라 데이터를 해석하기 위한 구조까지 포함하고 있는 데이터 모델을 뜻한다. 추상 데이터 모델의 가장 큰 특징은 데이터 모델 자체에 데이터를 해석하기 위한 구조를 포함하고 있기 때문에 저장 장치나 프로그래밍 환경에 독립적이라는 것이다.추상 데이터 모델은 데이터의 .. 2016. 4. 24.
[파일구조] - 파일구조 설계 III 이 글의 소스 코드는 File Structures: An Object-Oriented Approach with C++ 3rd Edition의 내용을 수정하여 작성한 것 입니다. 1. 파일에 대한 해석 지금까지 데이터 클래스 내부에 연산을 구현하는 방식부터 추상화(abstraction)와 클래스 계층구조(class hierarchy)를 이용하는 방식까지 다양한 방식으로 파일구조를 설계하였다. 설계에서 가장 중요한 점은 설계의 목적을 잊지 않는 것이다. 파일구조를 설계하는 목적은 결국 파일에 데이터를 저장하고 읽기 위함이다. 따라서, 파일이라는 것에 대한 명확한 정의를 내릴 필요가 있는데, 앞의 글에서 설명한 바와 같이 파일의 정의는 파일구조의 설계에 따라 달라진다. 지금까지 구현한 방식에 따라 파일은 아래.. 2016. 4. 24.
[파일구조] - 파일구조 설계 II 이 글의 소스 코드는 File Structures: An Object-Oriented Approach with C++ 3rd Edition의 내용을 수정하여 작성한 것 입니다. 1. 데이터 클래스의 확장 앞의 글에서 데이터 클래스에 직접 파일 연산을 구현하는 것과 버퍼 클래스를 이용하는 것의 문제점을 서술하였다. 클래스에 직접 파일 연산을 구현하는 방식의 단점을 극복하기 위해 버퍼 클래스를 따로 구현하였지만, 버퍼 클래스를 이용하는 방식 또한 메인 함수에 데이터 클래스의 pack, unpack 과정이 모두 드러나는 문제점이 존재하였다. 버퍼 클래스를 이용하면서 메인 함수를 간단하게 만들기 위한 방법은 매우 간단하다. 바로 버퍼 클래스의 pack, unpack 함수를 호출하는 연산을 데이터 클래스 내부에 .. 2016. 4. 24.
[파일구조] - 파일구조 설계 I 이 글의 소스 코드는 File Structures: An Object-Oriented Approach with C++ 3rd Edition의 내용을 수정하여 작성한 것 입니다. 1. 데이터 클래스 내부에 연산 구현 앞의 글에서 필드와 레코드를 저장하는 다양한 방식을 소개했다. 각각의 방식은 구현 목적과 실행 환경에 따라 장단점이 존재하기 때문에 좋은 파일구조는 다양한 저장 방식을 지원해야 한다. 다양한 저장 방식을 지원하도록 파일구조를 구현하기 위해 가장 쉽게 생각해볼 수 있는 방법은 데이터 클래스 내부에 read/write 연산을 구현하는 것이다. 예를 들어, 아래의 코드처럼 Person 클래스에 고정 길이, 길이 지시자 등의 방식으로 레코드를 읽는 read/write 연산을 구현할 수 있다. 아래의 .. 2016. 4. 23.
[파일구조] - 필드(Field)와 레코드(Record) 1. 필드(Field) 파일구조에서 필드는 파일을 구성하는 요소 중에서 의미를 갖는 가장 작은 단위를 뜻한다. 즉, 가장 근본적인 관점에서 파일을 읽고 쓴다는 것은 필드를 읽고 쓴다는 것이다.그러나 물리적인 공간에서 파일은 단순히 바이트(byte)의 연속일뿐이기 때문에 파일구조를 설계하기 위해서는 연속된 바이트에서 필드를 구분하기 위한 방법을 고려해야 한다. 연속된 바이트에서 필드를 구분하기 위한 일반적인 방법으로는 고정 길이 필드 방식, 길이 지시자 방식, 구획 문자 방식, 키워드=값 구조와 같은 기법이 있다.앞으로는 아래와 같은 데이터 클래스 Person을 예시로 파일구조를 설계할 것이다. 또한, 구현 언어는 C++로 가정하여 예시 코드를 작성할 것이다. class Person { private: i.. 2016. 4. 22.
[파일구조] - 파일에 대한 물리적 관점 1. 디스크(Disks) 디스크는 크게 데이터를 저장하는 부분과 데이터를 읽는 부분으로 구성된다. 데이터를 저장하는 부분은 아래의 그림과 같이 트랙(track)과 섹터(sector)로 구분할 수 있다. 대부분의 디스크는 아래의 우측 그림과 같이 여러 개의 판(플래터, platter)을 다층으로 쌓아서 저장 용량을 증가시키는데, 이러한 구조에서 각각의 플래터의 같은 위치에 존재하는 트랙으로 구성된 원기둥의 표면과 같은 모양의 집합을 실린더(cylinder)라고 한다. 위의 그림과 같이 다층으로 플래터를 쌓은 디스크에서는 여러 개의 헤더를 구성하여 디스크 연산의 효율을 증가시킨다. 여러 개의 헤더는 각각이 개별적으로 동작하는 것이 아니라, 하나의 축에 고정되어 같이 움직인다. 따라서, 같은 실린더에 존재하는.. 2016. 4. 22.
[파일구조] - 파일의 개념과 파일 연산 1. 물리적 파일과 논리적 파일 파일은 파일을 직접 관리하는 파일 매니저와 파일을 이용하는 응용프로그램의 관점에 따라 두 가지로 나타낼 수 있다. 물리적 파일(physical files): 파일 매니저의 관점에서 보는 파일로써 컴퓨터의 실제 디스크에 저장된 바이트의 연속을 의미한다.논리적 파일(logical files): 응용프로그램의 관점에서 보는 파일로써 물리적 파일로 연결된 채널을 의미한다. 응용프로그램에서는 논리적 파일을 통해 파일에 대한 연산을 수행한다. 그러나 응용프로그램은 논리적 파일이라는 물리적 파일과 연결된 채널을 이용함으로써 자신이 행하는 연산이 정확히 디스크의 어떤 위치에 적용되는지 알 필요가 없다. C언어에서 파일 디스크립터(file descriptor)를 이용하여 파일을 조작하는 .. 2016. 4. 14.
[파일구조] - 파일구조 설계 1. 파일구조 설계 시 중요한 점 객체지향 관점에서 파일구조를 설계하기 이전에 파일구조의 가장 중요한 특징은 메모리보다 느리다는 것이다. 만약 동일한 시스템에서 램 접근 시 50ns가 소모된다고 하면 디스크 접근 시에는 약 4.6ms가 소모된다. 산술적으로 디스크에 한 번 접근하는 것은 램에 92,000번 접근하는 것과 같다는 것이다. 따라서, 유지 및 보수, 확장성 등의 특성 이전에 파일구조에서 가장 중요한 점은 디스크 접근을 최소화 하는 것이다. 2. 파일구조의 구성요소 파일구조는 파일(데이터) 자체를 말하는 것이 아니다. 파일구조는 데이터를 표현(representation)하는 방식과 데이터를 접근하는 연산(operation)의 조합을 의미한다. 예를 들어, Windows 파일시스템에서 파일을 표현.. 2016. 4. 14.