자료구조와 추상자료형




개요


컴퓨터 공학에서 가장 중요한 과목을 꼽으라하면 순위권에 드는 과목 자료구조.

나 또한 컴퓨터 공학에서 가장 중요한 것들을 꼽으라 하면 자료구조 알고리즘을 꼽을 것이다.

그렇다면 자료구조가 무엇이길래 우리가 공부해야하고 많은 사람들이 이야기를 하는지 알아보겠다.

그리고 자료구조에서 흔히 얘기하는 추상자료형까지 공부해보겠다.




추상 자료형


자료구조에서 가장 중요한 개념 중 하나가 추상 자료형(Abstract Data Type)이다.

추상 자료형은 문자 그대로 추상적인 데이터 타입을 의미한다.

추상 자료형의 가장 큰 특징 중의 하나는 사용자와 구현자를 분리했다는 것이다.

사용하는 관점과 구현하는 관점을 분리하면서, 협업에 있어서 더욱 효과적이게 된다.

추상이라는 단어가 와닿지 않는다.

예를 들어 생각해보면 자동차 하나를 설계할 때 자동자의 나사, 재료 하나하나 생각하는 것보다 엔진, 바퀴등의 추상적인 단위로 설계하는 것이 편리하다.

프로그램을 설계함에도 동일하다.

int, char와 같은 기본적인 자료형 단위로 생각하는 것보다 우리가 필요로 하는 데이터 타입을 추상적으로 정의하고 구현하여 사용하는 것이 편리하다.

시용자 관점

사용자 관점에서는 내가 필요한 작업만 생각하면 된다.

자동차의 예시에서 자동차를 사용하는 사람은 어떤 기능, 어떤 기름으로 굴러가는지등 자신이 필요한 것들을 생각만 하여 사용하면된다.

자동차가 어떻게 만들어지는지는 전혀 몰라도 사용하는데에 불편함이 없다.

코드를 작성하는데 추상 자료형을 정의하고 사용하면 훨씬 편리하고 깔끔하다.

구현자 관점

구현자 관점에서의 추상자료형은 작업을 수행하기 위한 구체적인 구현 방법과 그 방법을 적용하기 위한 기본적인 자료형들과 작업들을 의미한다.

구현자 입장에서는 데이터와 데이터를 처리하는 작업을 분리해서 생각하면 안된다.

데이터는 그 데이터를 사용하는 작업들을 전제로 알맞게 설계되어야한다.

구현자는 작업의 구체적인 구현 방법과 구현을 위한 데이터 집합들을 고려해야한다.




자료구조


자료구조의 사전적 의미는 컴퓨터에서 처리할 데이터를 효율적으로 관리하고 구조화시키기 위한 학문이다.

즉, 가장 효율적으로 작업을 수행할 수 있도록 조직화한 데이터들의 집합을 말한다.

## 자료구조를 공부하는 이유

우리가 컴퓨터를 이용해서 어떤 프로그램을 작성하는 것은 특정 요구사항들을 해결해 나가는 것이다.

그런 요구사항들을 좀더 효율적으로 해결하기 위해 알고리즘을 배우는 것이고,

해결 방법을 어떤 효율적인 데이터 형태로 처리하도록 설계하기 위해 자료구조를 배우는것이라고 생각한다.

컴퓨터를 이용해서 자료를 처리하려면 컴퓨터에 맞게 데이터를 재가공 및 처리를 해주어야한다.

이전의 개발자들이 만들어놓은 효율적인 자료구조를 직접 구현하고 공부해봄으로써

좀 더 컴퓨터 방식에 가깝게 생각을 할지, 어떻게 메모리 공간을 효과적으로 활용할지, 코드를 효율적으로 간결하게 작성하는 법을 알 수 있다.

어떤 언어, 어떤 프레임워크, 어떤 툴을 사용하든 컴퓨터가 데이터를 처리하는 것은 바뀌지 않는다.

그러므로 좀 더 유연하고 코드를 효율적으로 작성하는 고급 개발자가 되어가는 과정중에는 자료구조를 확실하게 공부하는 것이 있다고 생각한다.




자료구조와 추상자료형


흔히 말하는 리스트, 스택, 큐, 트리등이 추상자료형이다.

즉 우리가 자료구조 과목에서 배우는 것들이 추상자료형이라고 볼 수 있다.