Data Structure & Algorithm

자료구조1

계발하는도르트 2021. 10. 27. 19:36

 0-1.  우리 사람이라는 존재는 여러 시대를 살아오고 있다. 시대가 변하면서 사람들의 삶은 변해가고 몇 십년 전부터는 엄청나게 웅장하고 방대한 자료들에 노출되어 접하고 있다.  우리 사회에 방대한 자료, 즉 정보들이 들어오면서 초반쯤에는 많은 양의 정보를 가지고 있는게 중요했지만 시간이 지나면서 이 많은 자료를 가지고 자신에게 필요하고 필수적인 자료를 뽑아 어떻게 효율적으로 즉, 효과 좋게 사용할 것인가 또한 이것으로 자신이나 제 3자에게 이득이 될 것인지가 중요해졌다.

 

0-2. 컴퓨터에서 자료의 구조를 만들어서 사용하면 뭐가 좋을까? 그냥 간단하게 예시를 들어보면 물품을 진열하는 것을 들 수 있다. 물품에는 여러 색, 종류, 길이 등등의 특징이 있다. 이런 특징을 가진 물품들을 그냥 아무렇게나 진열/배치하면 물건들이 여기 저기 널부러져 있게 된다. 마치 정리 정돈이 되지 않아 발디딜 곳이 없는 자취방처럼 말이다. 그러므로 중구난방으로 흩어져서 어디에 뭐가 있는지 찾느라 물건을 골라내기 힘들어 시간이 오래걸린다. 이와 반대로 앞서 말한 특징(색, 종류, 길이 등등)을 가지고 물품을 정리하면 어떨까? 예를 들어 종류에 따라 모아두면 해당되는 종류의 물건들끼리 모이게 된다. 따라서 모여져 있는 곳으로 가서 찾아보면 더 빨리 물건을 골라 갈 수 있다. 자, 전자와 후자 중에 어떤 부분이 덜 시간이 걸릴까? 당연히 후자다. 이처럼 컴퓨터로 우리가 접하는 자료들도 마찬가지다.  분류를 통해 구별해두면 시간도 아끼고 필요한 자료도 고르고 저장하고 처리하기 편하다. (처리한다는 건 컴퓨터에서는 개인적으로 눈 앞에 나타내는 것이라고 생각한다.) 그래서 이런 분류하는 과정들이 필요하기에 자료구조라는 것이 생겼고 또한 이를 사용하고 있다.

 

0-3. 자료구조를 왜 공부하나?

 앞으로 컴퓨터를 '컴'이라고 표기하도록 하겠다. 컴에서는 필요한 자료를 빠르고 효율적으로 저장/처리하도록 어떤 논리를 세워 구조화하고 분석/설계해서 사용한다. 그러므로 빠르고 정확하고 효과 좋게 해낼 수 있는 방법이기에 자료구조가 필요하고 필수적이며 기본적인 것이기에 자료구조를 공부해야하는 것이다.

 

0-4. '컴'은 자료를 어떻게 효과적으로 처리하나? 

컴과 사람이 함께 주로 일을 한다. 이런 순으로 수행을 하는데 바로 사람->컴->사람 순이다. 더 구체적으로 풀면 1. 문제 도출 2. 문제 변환 3. 실행 4. 결과 도출/확인이다. 이 중에서 3을 제외하고 나머지는 사람이 하는 일이다.

 여기서 잊지 말아야 할 것은 '컴'도 결국에는 기계라는 사람이 만든 도구라는 것이다. 따라서 컴도 사람의 손길이 필요하다. 

 자, 얘기를 계속하면 1. 은 어떤 문제가 있는지 발견하고 이를 기록/표현하는 것이다. 2.는 1.를 어떻게 처리할지 결정하는 것이다->어떤 대상을, 어떤 방식으로 처리할 것인지 결정하는 거다. 이 1과 2 과정에서 자료구조와 관련되개, 즉, 자료구조를 생각해서 분석하고 그 후에 구성하는 과정이라고 보면 된다. 2에는 과정이 더 존재한다. 2에서 처리 방식을 결정했으면 그 후에 알고리즘(문제 해결 과정)을 작성하고 그 후, 처리 대상을 결정하고 자료를 정의 후 프로그램을 작성하는 것이다. =>이 과정이 주로 자료구조라고 보면 될 것 같다.

 이 후에, 컴이 프로그램을 실행하고 사람이 결과를 보고 "잘 돌아가네!" or "어디서 틀렸지? 이렇게 나오면 안되는데..다시 해보자!"라는 생각의 선택지를 골라서 행동한다.

 

0-5. 자료구조의 측면.

 자료구조에는 '1. 이론적 측면' , '2. 실제적 측면'이라는 2가지 측면이 존재한다.

 1은 이론(확률, 이산수학-그래프, 집합, 조합적 분석)을 기본으로 해서 알고리즘을 분석 후 검색/정렬을 하거나 효율 분석(공간 복잡도, 시간복잡도)을 하여 최적의 상태를 결정한다.

 2는 1에서 결정한 것을 토대로 자료를 문자열, 리스트, 트리, 그래프, 파일 등으로 표현하고 이것을 토대로 알고리즘을 구현한 후 프로그래밍, 파일 구성, 운영체제, 메모리 관리 등에 사용한다.

 

0-6. 고급 개발자가 되려면..

 자료가 어떻게 되어 있는지 이해한 후 이를 분석해 그에 맞는 알고리증을 만드는 능력을 가져야 한다. 이런 능력은 자료구조를 잘 이해하고 알고 있어야 한다.