자료구조(1) - ADT와 자료구조

ADT와 자료구조의 차이, 공통점 이해

Featured image

지금부터 시작되는 강의는 C언어를 안다는 가정하에 모두 진행되므로, 모른다면 C 강의를 먼저 듣는 것을 추천한다(여기로)

이번 강의부터는 C언어를 기반으로 한, 자료구조 강의를 할 것이다.

자료구조란 이때까지 모호한 정의로 대신해왔지만, 사전적 정의는 데이터를 구조적으로 표현하는 방식과 이를 구현하는 데 필요한 알고리즘에 대해 논하는 기초이론이다.

우리가 배웠던 배열, 구조체, 공용체, 문자열 등 외에도, 실생활에는 더욱 다양한 형태의 자료 처리가 필요했다.

더 다양한 요구에 따라 이를 처리하는 방법론을 발전시켰고, 이를 자료구조론이라고 한다.

자료구조론에서는 크게 두 가지로 나눌 수 있는데, ADT 확립과 ADT의 실제 구현이다. (이런 이유로 많은 나라에서 자료구조와 알고리즘을 하나의 강의로 묶는다.)

우선은 ADT가 무엇인지 알아보자.


ADT란?

ADT(Abstract Data Type) 혹은 추상 자료형이란 간단하게 말하면 어떤 자료를 처리할 때 요구사항을 작성한 것으로 생각하면 된다.

다만 그 속에 자료와 필요한 기능에만 초점을 맞춘 채 자세한 구현은 신경 쓰지 않는 것이다.

위키피디아의 예시에서는 아래와 같이 설명하고 있다.

“예를 들어 전기밥솥을 추상 자료형에 비유한다면 그 속에 들어가는 밥은 자료가 되고, 밥솥에 있는 취사, 예약 취사 버튼들과 남은 시간을 표시하는 디스플레이에 어떤 내용이 표시되어야 하는지를 명기한 것이다. 추상 자료형에서는 이것들이 어떻게 구성되는지 관심이 없고, 몇 와트의 전기를 소모하는지에 대해서도 관심이 없다.”

이는 데이터와 기능의 수학적 구조로 언급했던 것처럼 자세한 구현과는 아무 관계가 없다.


자료구조란

자료구조는 ADT를 기반으로 실제로 구현한 그것으로 생각하면 된다.

ADT를 효율적으로 구현하는 방법(알고리즘)까지도 자료구조에 포함되기 때문에, 통상적인 상식과는 다르게 알고리즘과 분리할 수 없다.

자료구조를 구현하는 방식이 중요한 이유는, 코드의 성능 및 효율성(다음에 더 설명될 예정)이 전적으로 선택하는 자료구조에 따라 달라지기 때문이다.

예를 들어, 우리 강의에서 다루었던 정적배열은 원소의 최댓값이 정해진 채로 선언된다.

struct customers arr[100]//고객의 정보 저장

그런데 대기업에서 고객의 정보를 처리한다고 하자.

만약 고객이 100명이 넘어가게 되면, 위의 코드는 사용할 수 없게 된다.

그렇기에 위 자료구조가 아니라 다른 자료구조를 사용해야한다.

이처럼 요구에 맞게 ADT를 작성하고, 그것에 필요한 자료구조를 구현하는 것이 중요하다.

또한, 이는 앞으로 다룰 객체프로그래밍과도 밀접한 관계가 있다. (추후 강의 예정)


📖 오늘의 핵심(다 알기 전까지는 넘어가지 말자❗)

✅ 1. ADT를 이해한다.

✅ 2. 자료구조를 이해한다.

✅ 3. ADT와 자료구조의 차이를 이해한다.

⚠️ ADT와 자료구조는 같은 개념이 아님을 알자.

💣 과제, 없음.