01. 자료구조란?
안녕하세요 이번 시간에는 Data Structure에 대해 이야기 해 보겠습니다.
컴퓨터사이언스를 공부할 때 정말 지겹도록 들을 수 있는 이름, 바로 자료구조입니다. 도데체 자료구조란 무엇일까요?
자료구조에 대해 이야기 해 보기 전에 컴퓨터라는 장치에 대해 한번 이야기를 하고 넘어가겠습니다. 여러분이 생각했을 때 컴퓨터란 무엇일까요?
컴퓨터란 기계를 거창하게 생각하면 PC방이나 어디 회사에 슈퍼컴퓨터를 생각 할 수 있지만 단순히 생각하면 그냥 기계에 이산적인 데이터를 처리할 수 있는 전자식 뇌가 컴퓨터라고 생각하시면 됩니다. 간단히 얘기하면 사람이 시킨 명령을 처리하는 장치가 컴퓨터입니다.
A라는 기계가 있다면 기계가 움직이는 방식, 전체적인 구조는 기계공학자가 설계합니다. 그 기계를 어떤 소재로 만들어야 할 지는 화학공학자나 재료공학자가 판단 하겠지요. 동력만 있으면 움직이는 기계는 이 쯤에서 끝날 수 도 있습니다. 하지만 동력원이 전기라면? 전기공학자가 설계에 참여합니다. 전기를 받아왔으니 이제 전기를 사용해서 다른 기능들을 활용하려면 전자회로가 필요할테고 전자공학자가 필요해지겠지요. 전자회로 까지 달았으니 이제 뭘 할 수 있을까요? 기계가 주어진 상황에 따라 판단 할 수 있게 만들 수 있습니다. '아니 지금까지는 주어진 상황에 따라 판단 안했습니까?' 하는 생각이 드실 수 있겠습니다만, 논리회로만 가지고는 설계된 회로 내에서 전기의 흐름에 따라서만 기계가 작동합니다. 하지만 기계가 이산적인 데이터, 즉 구별 된 상황에 대해 기계가 판단 할 수 있게 하려면 컴퓨터공학자가 필요합니다. 컴퓨터는 엄연히 논리회로로 이뤄져있기 때문에 얼핏 생각하면 전자공학자 선에서 기계의 설계를 끝낼 수 있지 않을까 하는 생각이 들지만 여기서 중요한 키워드는 판단입니다. 기계가 판단을 해서 명령을 수행 할 수 있게 해주는 역할이 컴퓨터공학자의 역할인 것입니다.
앞에서 구별된 상황이라고 말하는 것에 대해 예를 한번 들어볼까요? 에어컨이 하나 있다고 칩시다. 평범한 에어컨을 하나 생각해보면 그냥 사람이 정해준 온도에 맞게 공기를 차갑게 바꾸기만 합니다. 여기서 상황이 하나 구별되었네요. 사람이 온도를 정해 준 상황 말입니다.
자 에어컨을 오랫동안 틀어놔서 원하는 기온을 얻었습니다. 이제 에어컨이 계속 틀어진다면 계속 시원해지기는 하겠습니다만, 그 만큼 에너지가 낭비되겠지요? 이 때 이 에어컨이 특정 기온이 현재 유지되고 있다면 잠시 냉방을 멈추고 어느정도 시간이 있다가 다시 틀어지게 할 수는 없을까요? 여기서 구별 된 상황이 또 하나 나왔습니다. 정해 진 기온 까지 냉방이 된 상황 말입니다.
이런 구별 된 상황에 따라 기계가 판단을 해서 일을 할 수 있게 하도록 하는 것. 그것이 바로 컴퓨터의 역할입니다.
컴퓨터의 역할이 뭐 무궁무진 합니다만, 최대한 간단하게 설명하면 이렇다는 겁니다. 오류에 대한 태클은 언제나 환영입니다.
컴퓨터는 아날로그 컴퓨터도 있지만 현재 우리가 다루고 있는, 지금 제 앞에 또는 여러분 앞에 있는 컴퓨터는 디지털 컴퓨터입니다. 디지털의 장점은 구별 된 상황에 대해 표현하기 매우 편하다는 것 입니다. 어찌됬건 컴퓨터는 숫자 체계 내에서 움직이니까요 그것이 2진법이든 3진법이든 16진법이든 말이죠. 구별 된 상황에 따라 숫자를 매기면 매우 편하겠지요?
디지털 논리회로 체계 내에서 움직이는 컴퓨터는 사람과는 다르게 판단합니다. 아까도 말씀드렸다시피 숫자 체계, 즉 디지털세계에선 아날로그와는 다르게 저차원 세계입니다. 특히 대부분 여러분들은 2진법 체계를 사용하는 컴퓨터를 사용하실텐데 2진법체계는 1차원이라고 할 수 있습니다. 기계어에 대해 공부를 해보시면 알겠지만 사실 우리가 프로그래밍 언어로 어떤 프로그램을 코딩해서 컴파일러로 돌리게되면 cpu는 그 언어를 그대로 받아들이는게 아니라 0과 1 전기신호로 받아들입니다. 즉 우리 사람의 세계에서의 생각 방식이 안통한단 이야기입니다.
사람은 특정한 데이터를 머릿속으로 분석해서 처리하는 방식이 사람마다 다르겠지만 대부분은 눈으로 보고 그럭저럭 이해한 다음 바로 처리가 가능합니다. 예를 하나 들어 볼 까요?
사람은 이 표를 보고 무슨과일이 제일 비싸고 싼지 바로 판단이 가능합니다. 하지만 컴퓨터는 이걸 모니터에 백날 보여줘봐야 아무 것도 할 수 없습니다.
만약 컴퓨터가 이 표에서 가장 비싼 과일과 싼 과일을 구별 할 수 있게 하려면 어떻게 해야 할까요? 결국 프로그래밍을 따로 해야합니다. 그리고 이 프로그래밍을 할 때 우리는 이 표를 컴퓨터가 알아볼 수 있도록 만들어 줘야 합니다. 자료구조는 바로 이 때 사용됩니다.
즉 자료구조는 데이터를 컴퓨터가 파악 할 수 있도록 가공한 것이라고 할 수 있습니다.
조금 더 와닫게 예시를 들자면 다음과 같습니다.
#include <iostream>
using namespace std;
int main(){
int A[10] = {1,2,3,4,5,6,7,8,9,10}; //배열 자료구조
int sum = 0;
for(int i = 0; i < 10; i++){
if(A[i] % 2 != 0) sum += A[i]; //홀수만 찾아서 더하는 알고리즘
}
cout << sum << '\n';
}
정해진 수 중에서 홀수만 찾아서 저장해본다고 생각 해 볼까요? C++ 과 같은 언어를 배운 사람들은 당연히 배열이나 리스트에 값을 저장하고 for문을 쓰겠다는 생각을 한번은 했을 것입니다. 여기서 배열이라는 자료구조를 선택했기에 for문을 통해 모든 배열의 데이터를 선형탐색하며 홀수를 찾는다 라는 알고리즘을 선택할 수 있는 것을 알 수 있습니다.
즉 좋은 알고리즘을 선택하기 위해선 자료구조 지식이 필수라는 것을 알 수 있습니다.
이번 시간에는 자료구조가 뭔지만 짧게 다뤄 봤습니다. 다음 시간엔 Elementary Data Structures 들에 대해 하나씩 다뤄보는 시간을 가져보겠습니다.
Author And Source
이 문제에 관하여(01. 자료구조란?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sierra9707/01.-자료구조란저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)