반응형

 비전공자로서 자료구조를 공부하다가 궁금했던 것이 있다. 내가 파이썬부터 배우기 시작해서 그런지는 몰라도.

스택/큐 다되는 deque가 있는데, 왜 굳이 스택/큐를 나누어서 쓰는 것일까? 그냥 그 모든 기능을 다 되게하면 안되는 걸까?

 

이 질문에 대한 답을 오늘 드디어 깨달아서, 이렇게 글을 쓴다.

 

일단 자료구조의 정의부터 알아보자.

In computer science, a data structure is a particular way of storing and organizing data in a computer so that it can be used efficiently

즉, 효율적으로 사용되기 위해, 데이터를 저장하고 표현하기 위한 특정한 방식이 자료구조라고 할 수 있다.

그러니까 스택이나 큐가 먼저 있었고, 그에 따른 기능들이 나온 것이 아니라.

FIFO, LIFO등의 데이터를 저장하고 표현하기  위한 방식이 있었고, 이에 대한 이름을 스택, 큐라고 붙인 것이다.

 

 

여기서부터는 내 상상이자, 뇌피셜이 살짝 섞여있다. (실제로는 아닐 수 있음 주의)

 

컴퓨터과학자들이 먼저 자료구조를 만들고, 프로그래머들이 이를 사용했을까?

아니면 프로그래머가 먼저 코드를 짜다보니 특정한 데이터의 저장/표현방식이 반복되었고, 이를 컴퓨터과학자들이 스택/큐라고 이름을 붙였을까?

 

나는 후자라고 생각한다. 사실 프로그래밍 세계의 발전이 그러한 것 같다. 계속 해결해야한느 문제점들이 발생하고, 이를 해결하려고 노력하고, 그 해결점들이 컴퓨터과학으로 학문화되는 것 같다. (그래서 나는 운영체제 과목을 물리적 한계에서 최적화된 컴퓨터를 개발하기 위한 컴퓨터과학자들의 분투들이 담겨있다고 느꼈다.)

 

 

그리고 C언어로 된 책을 보면 ADT를 설정하고 이를 자료구조로 구현한다.

이는 ADT는 설계도 같은 것으로, FIFO를 구현하는데 LIFO까지 가능하게 하면 이는 사족이 달려있는 것과 같다.

또한 다른 프로그래머들이 어떠한 맥락을 파악하는데 어려움을 겪을 것이다.

예를 들어, a라는 프로그래머가 FIFO기능이 필요한데 그냥 deque로 짜놓았다면, b란느 프로그래머는 deque가 fifo기능을 위해 들어갔다는 사실을 전후 코드를 살펴야하는 노력이 필요하다. 이러한 비효율을 줄이기 위해서라도, queue/ stack은 나누어서 쓰여져야 한다.

 

여튼 내가 가졌던 의문은 전제가 잘못되었다.

일단 나누어서 개발한게 아니라, 개발된것에 이름을 붙인것 뿐이다.

그리고 나뉘어져있어야 타 개발자와의 협업, 소통 등에서 유리하다.

 

반응형

+ Recent posts