본문 바로가기

mandle.Making/C언어

자료구조란

우리는 인터넷, TV, 책 등 매일 엄청난 양의 자료 속에서 살아가고 있다. 사회가 정보화 다양화 될수록 우리가 사용할 수 있는 자료 또한 더욱 풍부해지고 다양해진다. 정보의 홍수라고 할 만큼 자료가 방대한 지금은 얼마나 많은 자료를 가지고 있느냐 보다는 가지고 있는 자료를 얼마나 효울적으로 사용하느냐가 중요한 시대가 되었다.

예를 들어, 문구점에서 필기구를 진열하는 방법을 살펴보자. 종류와 색상에 관계없이 판매하는 모든 종류의 필기구르 같은 상자 안에 넣어둘 수도 있고, 종류별 색상별로 분류해서 진열 할 수도 있다. 원하는 필기구를 찾을 때 어떤 방법이 더 효과적일까? 단순하게 생각해봐도 종류별 색상별로 분류하는 방법이 더 효과적이다. 이와 마찬가지로 자료를 효율적으로 표현한고 저장, 처리하기 위해 정리하는 것이 자료구조이다.

그렇다면 컴퓨터에서는 자료구조가 어떻게 사용되고 있을까? 컴퓨터에서는 자료를 효과적으로 표현하고 효율적으로 저장, 처리할  수 있도록 논리적인 구조로 설계하고 분석하여 프로그램에서 사용한다. 컴퓨터는 자료를 처리하는 장치이므로 컴퓨터 관련 분야에서 자료구조는 기본적이고도 필수적인 개념이다.

"모든 일은 컴퓨터가 하는데 왜 우리가 자료구조를 공부해야 하는가?"라는 의문을 가질 수 있다. 이런 의문을 풀기 위해 컴퓨터가 문제를 해결하는 과정을 살펴보자.

콤퓨터가 효율적으로 자료를 처리하려면 문제 도출 단계와 문제 변환단계에서 문제를 자료구조 측면에서 분석하고 구성해야 한다. 사용자는 문제를 좀 더 효율적으로 해결하기 위해 문제를 정의하고 처리 방식을 결정하여 알고리즘을 작성하고, 자료를 정의해야 한다. 이러한 과정에 자료구조에 대한 개념과 활용 능력이 필요하다.

자료구조는 이론적인 측면과 효율적인 측면, 실제적인 측면에서의 응용을 모두 다루어야 한다. 이론적인 측면에서는 그래프 이론, 집합 이론, 조합 이론의 이산수학과 확률 이론을 기본으로 알고리즘을 분석하여 검색 정렬 방법 등을 결정하고, 효율적인 측면에서는 공간적 효율성과 시간적 효율성을 기준으로 최상의 상태를 결정한다. 이렇게 결정한 내용에 따라 자료를 문자열, 리스트, 트리, 파일 등의 구조로 실제적으로 표현하고 알고리즘을 구현하여, 프로그럄과 파일 작성 및 메모리 관리, 운영체제 등에 사용된다.

성공적인 시스템을 개발하는 고급 개발자가 되기 위해서는 자료의 특성을 이해하고, 분석하여 최적의 알고리즘을 개발하는 능력이 필요하다. 이러한 능력을 키우기 위해서 우리는 자료구조에 대한 학습이 필요하다.

그렇다면 자료구조는 어떻게 분류 할 수 있을까? 자료를 형태에 따라 분류하면 프로그래밍 언어에서 배운 정수, 실수, 문자, 문자열 등의 데이터 타입에 해당하는 단순 구조 와 자료 간의 연결관계가 1:1 관계를 가지고 있는 선형 구조 1:n 또는 n:n 관계의 비선형 구조, 그리고 파일 구조로 나눌수 있다. 표현할 자료의 특성과 양, 자료의 주된 사용 방법과 수행하는 연산의 종류, 구현에 필요한 기억 공간 용량을 고려하여 가장 효율적인 자료구조를 선택해야 한다.