본문 바로가기
소년의 IT 쉽게 이해하기/개발 쉽게 이해하기

자료 구조(Data Structure) 쉽게 이야기하기

by Circlezoo 2022. 2. 13.

출처: geralt on Pixabay

 

 업무를 하다보면 자료구조라는 말을 가끔 들을 수 있는 데 자료구조란 무엇인지 한번 알아보겠습니다.

 

Q. 자료 구조란 뭔가요?

 

 자료 구조란 저장장치 안에 존재하는 자료들 간의 관계.

자료들을 어떻게 처리하면 좋을 것인가?에 대한 분석하는 것을 통틀어서 자료 구조라고 말합니다.

 

자료구조는 선형적자료구조와 비선형적자료구조로 구분을 합니다.

 

Q. 선형적 자료구조란 뭔가요?

 

 하나의 자료 뒤에 하나의 자료가 존재하는 것이며, 자료들 간의 앞뒤 관계가 1:1의 선형관계입니다.

선형적인 자료 구조의 종류로는 Stack, Queue, Deque, Linear List, Array 이렇게 있습니다.

 

[Stack]

 

 Stack은 벽돌을 쌓아올리는 느낌입니다.

가장 아래 데이터를 Bottom이라고하고 가장 위의 데이터를 Top이라고 합니다.

가장 위에 쌓여진 데이터가 가장 최신 데이터이며, 아래 놓여져 있는 데이터가 가장 오래된 데이터입니다.

이렇게 벽돌처럼 쌓는 방식이다보니 후입선출의 방식으로 데이터구조가 만들어져있습니다.

이런 구조가 만들어지는 이유가 한 곳을 통해서만 데이터가 이동이 가능하기때문에 한 곳에서 삽입이나 삭제가 이루어집니다.

가득차있는 데 데이터가 들어오면 오버플로우(Overflow)가 발생하게되고, 비어있는 데 데이터를 빼내려고하면 언더플로우(Underflow)가 발생하게 됩니다.

 

[Queue]

 

 Stack이 한 개의 출입구로 데이터가 왔다갔다한다면 Queue의 경우 출입구가 2개입니다. 한 쪽에서는 데이터가 들어오고 한쪽에서는 데이터가 나가는 방식을 하고 있는 것입니다.

그렇다보니 먼저들어온게 먼저나가게되는 선입선출방식을 사용하게 됩니다.

데이터가 들어오는 쪽을 REAR 혹은 TAIL이라고하며, 데이터가 나가는 쪽을 HEAD 혹은 FRONT라고 합니다.

 

[Deque]

 

 Queue와 같이 출입구가 2군데입니다. 하지만 Queue처럼 데이터 입력부와 데이터 출력부가 나누어져있지 않고, Stack처럼 한 곳에서 입력 출력을 모두 할 수 있습니다. Stack과 Queue가 합쳐진 모습을 가지고 있습니다.

 

[Array]

 

 배열은 숫자는 숫자, 문자는 문자끼리 묶여 나열되고 순서를 갖는 집합을 이야기합니다. 

그렇다보니 반복적인 데이터에 적합한 구조를 가지고 있습니다. 

그러다보면 첨자({1})라는 것이 있는 데 이게 한 개씩 있는 경우 1차원 배열이라고 하며, 만약 2개씩 있는 경우 2차원 배열이라고 합니다.

첨자가 두 개씩 있으면 어느정도 행과 열이 만들어집니다.

 

이 방식은 조금 딱딱한 틀이 있는 방식이라 새로운 영역이 필요해 이 틀을 늘리려고하거나 이런 작업은 힘듭니다.

그리고 항상 공간을 가지고 있기 때문에 불필요한 메모리가 사용될 수 있습니다.

 

[Linear]

 

 공간을 연속적으로 배장 받아서 데이터가 들어갑니다. 하여 데이터 공간의 이용밀도가 가장 좋은 방법입니다.

문제는 너무 조밀조밀하게 있다보니 중간에 데이터가 들어가기 힘들고 만약에 들어가더라도 대규모 이동이 필요합니다.

이는 삭제가 될 때도 마찬가지입니다. 하나가 빠지면 다시 그 빈공간을 메꾸기 위해서 대규모 이동이 필요합니다.

 

[Linked]

 

 자료를 임의의 기억공간에 기억을 시키고 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 자료를 연결시키는 작업을 말합니다. 노드의 포인터부분만 잘 조정해지면 이동이나 삭제같은 것이 편합니다.

다만 포인터 영역도 필요해서 더 많은 공간을 필요로 하고 이동 위치나 주소를 계산하다보니 접근 속도가 조금 느립니다.

 

Q. 비선형적 자료 구조란 무엇일까요?

 

이미지 출처: https://velog.io/@codenmh0822/%EB%B9%84%EC%84%A0%ED%98%95-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%8A%B8%EB%A6%ACTree

 

 비선형적이다는 말은 트리구조다라고 생각하시면 좋겠습니다.

나무처럼 뿌리부터 올라가는 형태는 아니고 뿌리가 제일 위에 있고 밑으로 가지치는 모양을 가지고 있습니다.

 

뿌리를 Root라고 부르며 이건 한 개만 존재합니다.

뿌리에서 뻗어나오는 것을 차수(Degree)라고 합니다.

그렇게 위에 있는 노드들을 부모노드라고하며 아래 있는 노드들을 자식노드, 자노드라고 부릅니다.

그리고 뻗어나온 가지수가 가장 많은 것을 Tree Degree라고 부릅니다.

Depth는 Level을 의미하며 자식이 없는 노드들을 터미널 노드라고 부릅니다.

 

 

 

 참고: https://velog.io/@codenmh0822/%EB%B9%84%EC%84%A0%ED%98%95-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%8A%B8%EB%A6%ACTree

 

비선형 자료구조 - 트리(Tree)

트리 정의 데이터의 각 요소들을 계층적으로 연관되도록 구조화 시키고자 할 때 사용하는 비선형 자료구조. 데이터의 각 요소들의 단순한 나열이 아닌 부모-자식 관계의 계층적 구조로 표현한

velog.io

 

반응형

댓글