4.1 추상화와 자료구조

이 절은 자료구조를 사용하여 추상화가 어떻게 ‘표현’될 수 있는지 설명한다. 여기서 ‘표현’이라는 의미는 추상화 한 것을 프로그램으로 개발하기 위한 알고리즘을 작성하는데 도움이 되는 형태로 나타낸다는 의미이다. 이 절에서는 세 가지 자료 구조를 설명한다 (이 중 이미 두 가지는 앞에서 간단히 학습한 바 있다). 또한 매우 복잡한 추상화를 다루고 세 가지 자료구조를 사용하여 추상화를 표현하는 간단한 방법을 개발할 것이다.

 

앞에서 추상화 주어진 이해관계자와 관련된 개체 간의 속성 정보를 식별하는 과정 (process)이라는 것을 학습하였다. 추상화에 의해 모델링될 수 있는 개체는 인공물(사람, 거북이, 책, 영화 또는 구체적인 것), 사건(범죄, 선거, 지진 또는 발생하는 것), 또는 과정 (process) (실험, 게임, 연극 또는 시간이 지남에 따라 발생하는 활동)이 될 수 있다.

 

추상화는 오직 사용 목적과 관련된 속성들만 포함하기 때문에 실생활 개체를 단순화 시키는 것이다. 그 외의 모든 속성들은 무시되거나, 모델에 속하지 않는다. 추상화가 실제 세계를 단순화시키는 것임에도 불구하고 추상화는 여전히 복잡할 수 있다. 예를 들어, 이해관계자가 의사의 경우 환자의 추상화를 생각해보자. “환자”의 추상화는 그 사람에 대한 많은 속성을 무시한다. : 그가 좋아하는 음악의 장르, 그의 자동차 보험 회사, 그가 구독하는 신문, 그 사람의 최근 페이스북이나 블로그의 게시물 등. 이러한 속성들은 다른 이해관계자들에게는 관계가 있을 수 있지만, 의사와는 관계가 없다. 그러나 환자를 위해 의사가 필요로 하는 속성들은 복잡하다. 그 속성들은 가족력, 최근 병원검사 기록, 약물치료 기록, 개인정보(키, 몸무게, 나이, 성별), DNA 정보, 증상의 목록, 건강보험, 독성 물질에 대한 노출, 의사의 진단기록 등을 포함할 수 있다.
지금까지 아주 간단한 추상화 작업을 해보았다. 추상화 사례는 숫자(온도, 주식 값)로 표현될 수 있고, 목록으로도 표현될 수 있다(예측된 온도 목록, 지진의 진도 목록, 특정 지역의 시간에 따른 범죄율 목록). 이제 더 복잡한 추상화를 처리하기 위해서 추상화 방법과 프로그래밍 능력(지식과 도구)을 갖춰야 한다.

 

자료 구조는 추상화의 표현을 구성하기 위한 수단들을 표현하기 위해 사용된다. 앞으로 3개의 자료구조를 설명할 것이다. 이 3개의 자료구조만으로도 아주 복잡한 추상화를 표현할 수 있다. 앞서 알고리즘을 학습하면서 복잡한 알고리즘이 계산, 순차, 선택, 반복블록들을 결합함으로써 만들어질 수 있는 것을 보았다. 이와 같이, 몇 가지 간단한 자료구조 블록으로도 원하는 만큼의 강력한 구조를 형성하도록 결합할 수 있다. 그리고 또한 동일한 추상화를 나타내기 위해 자료구조 블록을 다른 방법으로 결합하는 것이 가능하다. 이러한 알고리즘 설계와 자료구조를 설계하는 것이 창의성의 일부라고 할 수 있다.

 

자료구조를 형성하는데 있어서 아래 두 가지의 이점을 사용하고자 한다.

  • 사람들은 복잡한 상황이나 문제를 계층적으로 구조화함으로써 그 복잡한 문제를 처리 할 수 있는 내적 능력이 있다. 예를 들면, 미국은 정부로서 세 가지 부서로 나누어진다. 입법부는 상원과 하원 두 가지 원으로 나누어진다. 백악관은 각각의 하원의원 선거구의 대표들로 구성된다. 사법부는 대법원과 지방 법원으로 구성되어 진다. 행정부는 많은 부서와 기관으로 구성되어 있고, 이 설명에서 최고 수준의 개체(미국 정부)는 3개의 부서로 나뉘어 있다. 이러한 각각의 부서는 몇 몇의 구성 부서로 표현될 수 있다. 이러한 각각의 구성 부서는 더 작은 부서로 나뉠 수 있다. 이 계층적인 구조에 모두가 동시이거나 같은 수준에서는 아니지만 복잡한 속성들 모두가 표현되어 있다.
  • 데이터는 그자체가 데이터를 구성하는 방법에 대한 실마리를 제공하기도 한다. 예를 들면, 만약 모두 비슷한 종류인 속성들의 집합을 갖는다면(모두 기온이거나, 모두 지진의 진도 이거나, 모두 책 제목이거나..) 그것들을 하나의 단일 리스트로 구성할 수 있다. 다른 형식의 데이터는 다른 구성을 나타낸다.

 

다음 단계는 데이터 구조에 대해 툴킷(toolkit)을 개발하는 것이다.

Leave a Reply

Your email address will not be published. Required fields are marked *

*