자료구조는 현실 세계의 자료를 컴퓨터에 전달하기 위해 사용되는 자료의 추상화된 형태이다.
자료구조는 알고리즘과 함께 고려되어 구조화되며, 프로그램이 구현된 이후의 컴퓨팅 성능과 컴퓨팅 서비스에 큰 영향을 미친다.
자료구조 목차에 첫 챕터에서는 아래에 있는 것들을 기록할 것이다.
1. 자료구조의 기본 개념
2. 추상화
3. 자료구조의 형태
4. 알고리즘과 자료구조의 관계
자료구조의 기본 개념
자료: 현실 세계에서 관찰이나 측정을 통해서 수집된 값이나 사실
개념자체가 조금 모호하게 들릴 수도 있는데 예를 들면 체온계를 이용해 체온을 재는 행위, 속도계를 이용해서 자동차의 속도를 측정하는 행위들을 포함한다.
정보: 어떤 상황에 적절한 결정이나 판단에 사용될 수 있는 형태로 '처리과정'을 거쳐 정돈된 '자료'의 2차 처리 결과물
즉, 정보는 우리들이 조금 더 정확한 판단을 할 수 있도록, 가공된 자료의 결과물이라고 생각해 볼수 있다.
I = P(D)
위에서 I는 정보, D는 자료, P는 처리를 말하는데, 종합해보자면 정보는 자료를 처리해서 얻어진 유용한 결과라고 할 수 있다.
현재 우리는 정보는 자료에 의해 가공되고, 가공된 정보들은 사람이나 컴퓨터를 통해 지식으로 축적되는 사이클 속에서 살아간다.
특히 컴퓨터를 통해 가공되는 정보들은 적절한 의사결정에 많은 도움을 주고 있는데, 빅데이터라는 말을 사용할 수 있을 정도로 거대해진 자료(데이터)를 정보로 만들기 위한 작업들이 필요하다.
이러한 작업들은 여러 단계의 과정을 거치는데, 그 중 첫번째 단계는 측정하고 관찰하여 쌓아 놓은 자료를 컴퓨터에서 사용할 수 있게 정리하는 과정인데 이 과정은 추상화를 통해 자료의 논리적 관계를 구조화한 개념인 '자료구조' 를 사용하여 진행된다.
추상화
자료구조를 설명할 때 추상화라는 단어를 자주 사용하는데, 추상화의 정의는 다음과 같다.
추상화: 공통적인 개념을 이용하여 같은 종류의 다양한 객체를 정의하는 것
예를 들면 친구들에게 "우리 놀러 갈때, 기차타고 가자"라는 말을 꺼냈을 떄, 친구들은 '기차'라는 추상화된 객체를 떠올릴 가능성이 높다.
굳이 'KTX", "새마을호"인지에 대한 구체적인 언급이 없음에도 불구하고, 기차역에서 기차를 타게 된다는 생각을 공유하게 된다.
이처럼 추상화는 말하는 사람의 의사를 간결하게 전달할 수 있게 해주는 특성을 가지고 있는데, 자료구조에서도 다양한 객체를 컴퓨터에서 활용하기 위해 자료의 구조에 대해서 공통의 특징만을 뽑아, 개발자의 머리속에서 쉽게 그림을 그려 나갈 수 있도록 도와주는 특성을 가지고 있다.
즉, 자료사이의 논리적 관계를 컴퓨터나 프로그램에 적용하기 위해서는 자료의 추상화가 필요하며, 추상화를 통해 자료의 논리적 관계를 구조화 한 것을 자료구조라고 한다.
자료구조의 형태
자료구조는 프로그래밍 언어에서 제공하는 '미리 정의된 자료구조' 와 개발자가 정의하여 사용하는 '사용자 정의 자료구조' 로 구분된다.
기본 자료구조: 우리가 일상생활 속에서 사용하는 '자료'의 추상화된 모습
파생된 자료구조: 프로그램 개발자가 프로그램 언어에서 제공되면 유용한 자료구조라고 판단한 자료구조
사용자 정의 자료구조: 프로그램 개발 방향에 따라 프로그래밍 언어로 새롭게 정의하여 사용하는 자료구조
알고리즘과 자료구조의 관계
자료가 복잡해지거나 소프트웨어가 복잡해질수록 자료구조의 중요성이 강조되고 있다.
자료구조와 함께 항상 등장하는 알고리즘은 논리적 관계로 구조화한 자료구조를 통해 컴퓨터에 일을 시키기 위한 명령문이라고 생각해 볼 수 있다.
그렇기 때문에 만약 자료구조가 효율적으로 구축되지 못하면 알고리즘이 느리게 수행되거나 결과가 다르게 나오는 현상이 발생한다.
위에 그림처럼 자료구조가 컴퓨터에 대한 입력값의 추상화된 상태라면, 알고리즘은 컴퓨터가 수행해야 할 명령의 추상화이다.
즉, 자료구조는 알고리즘의 기초이다. 알맞은 재료들(자료구조)을 사용하여 상황에 따라 알맞게 설계하고 실행(알고리즘)되어 출력되는 일련의 활동들은 프로그램 성능에 커다란 영향을 미친다.
다음 기록은 '배열' 이다
<Data structures> chapter 1, 자료구조란 end
'CS(Computer science) > 자료구조&알고리즘' 카테고리의 다른 글
그래프(Graph) (0) | 2020.01.01 |
---|---|
Hash(해시) (0) | 2020.01.01 |
Stack vs Queue (0) | 2020.01.01 |
Array vs ArrayList vs LinkedList (0) | 2019.12.31 |
배열 (Array) (0) | 2019.11.26 |