본문 바로가기
CS/Data Structure

[CS/Data Structure] 자료구조란 무엇인가요?

by iosdevlime 2023. 2. 16.

자료구조, 알고리즘.. 

용어는 참 익숙한데, 어디서부터 어떻게 시작을 해야할지😭

 

그래도, 어느하나 허투루 넘어가지 않는 성격인지라

부족한 CS 지식이 발목을 잡지 않도록,

 

효율적인 데이터 구조를 만들기 위한 Data Structure,

자료구조에 대한 포스팅을 앞으로 기록해 나갈 예정입니다.

 

 

우선, 왜 우리가 자료구조를 알아야 하는지 살펴봐야겠지요?

 

 

 


 

 

 

자료구조(Data Structure) 

논리적으로 정의된 규칙에 의해 데이터를 효율적으로 관리하기 위한 표현, 혹은 구조 

 

자료구조란, 단어 그대로

'데이터(Data')의 '형태(구조)'를 의미합니다.

 

프로그램이 잘 작동하기 위해,

우선적으로 개발자는 '효율적인' 코드를 작성해야 하는건 당연한 이야기겠지요?

 

여기서 '효율적'인 코드를 실현하기 위해선, 한가지 전제조건이 필요합니다.

 

바로, 데이터의 관리 입니다.

 

 

 

자료구조의 필요성

  • 자료(데이터)의 구조화는, 프로그래밍 이외 모든 영역에서 효율적인 관리를 이끌어 냅니다.
    • 데이터를 마구잡이로 활용하는 것 보다, 일종의 규칙을 설정한다면 더 효율적이겠지요?
    • 규칙, 혹은 관리는 데이터의 탐색 / 추가 / 삭제 등의 작업을 의미합니다.
  • 다시 말해, '자료구조'란 특정 규칙에 의한 데이터의 효율적인 관리적 표현입니다.
    • 즉, 한정적일 수 밖에 없는 메모리 공간을 효율적으로 사용한다는 의미와 동일합니다.
  • 예를 들어, 다음과 같이 '빈 책장'이 있다고 가정해보도록 합니다.
    • [1번 책장]은 책이 무작위로 꽂혀 있기 때문에 나중에 책을 찾기가 어려울 수 있습니다.
    • [2번 책장]과 같이 칸마다 같은 색상의 책을 진열했으나, 그렇지 못하는 책과 빈 공간이 발생합니다.
    • [3번 책장]과 같이 섹션을 나눴으나, 가림막을 설치하는 과정에서 책장의 공간이 줄어들었습니다.

1번 책장은 무작위로 책이 꽂혀있으며, 2번 책장은 칸마다 색상별로 꽂혀있으나, 자리가 부족해 진열하지 못한 책들이 있다. 3번 책장은 책장에 칸을 나눠서 모든 책이 들어갈 수 있도록 순서대로 배치했다.
과연 어떤 책장이 효율적인 '자료구조'를 활용했다고 볼 수 있을까?

 

  • 여기서 '책장'은 하나의 메모리 공간이며, '책'은 데이터라고 볼 수 있습니다.
    • 위 예시와 같이, 메모리=책장을 효율적인 자료구조로 만드는 다수의 방법이 존재합니다.
    • 정답은 없습니다. 특정 상황과 목적에 따라 자료구조를 선택하는 것이 중요합니다.

 

 

 

자료구조와 알고리즘(Algorithm)의 관계

  • 자료구조와 알고리즘은 하나의 세트입니다!
    • 알고리즘(Algorithm)이란, 문제를 해결하기 위한 절차이자 처리과정에 대한 recipe 입니다.
    • 설정된 자료구조에 따라 문제를 빠르고, 효율적으로 해결할 수 있는 방법을 고민합니다.
  • 자료구조의 특성에 따라, 효율적인 알고리즘(문제풀이방법)을 선택하게 됩니다.
    • 만약, 초록색 책(5)을 찾고자 한다면? (알고리즘)
    • [2번 책장]과 같은 자료구조라면, 2번째 칸 ➟ 5번째 책 과 같이 찾게 됩니다. 
    • [3번 책장]이라면,  초록색 ➟ 가장 마지막에 위치한 책 과 같은 방식을 사용하게 됩니다.

 

 

(이후, 알고리즘에 대한 자세한 내용은 CS/Algorithm 파트에서 구체적으로 포스팅 하도록 하겠습니다)

 

 

 


 

 

 

자료구조의 분류와 특성

자료의 특성, 연산의 종류, 필요 메모리 크기 등 조건에 따라 적합한 자료구조를 선택 

 

메모리 공간을 효율적으로 사용하기 위해 데이터를 어떤 자료구조로 구성해야 할까요?

앞서 언급한 바와 같이, 모든 목적에 착! 하고 들어맞는 자료구조는 없습니다.

 

따라서,

'데이터의 특성'이나 필요한 '메모리 공간 크기', 사용할 '연산의 종류'

조건에 따라 다양한 종류의 자료구조를 선택, 활용할 필요가 있습니다.

 

 

 

 

자료구조의 종류, 어디서부터 어떻게 학습해야 하나요?

  • 자료구조는 크게 단순구조 / 선형구조 / 비선형구조 / 파일구조로 분류됩니다.
    • 집중해야 할 종류는, 자료간의 연결형태나 모양에 따라 분류되는 선형, 비선형구조입니다.
  • 선형구조(Linear)는 데이터를 '순차적'으로 나열시킨 자료구조의 형태입니다.
    • 하나의 자료 뒤에, 또 다른 하나의 자료가 1:1 관계로서 존재(선형관계)합니다.
    • 대표적으로 배열(Array)과 리스트(List)가 있으며, 스택(Stack)큐(Queue) 또한 해당됩니다.

선형구조
선형구조(Linear)

 

  • 비 선형구조(NonLinear)는 하나의 데이터 안에 또 다른 데이터가 존재하는 형태입니다. 
    • '계층구조' 혹은 '망 구조'로 구성되며, 1:n 혹은 n:n관계를 가집니다.
    • 대표적으로 트리(Tree)그래프(Graph)가 있습니다.

비 선형구조
비 선형구조(NonLinear)

 

 

 


 

간단한 예시를 바탕으로

자료구조의 개념, 분류에 대해 알아보았습니다.

 

다음 포스팅을 시작으로 

자료구조의 종류에 대한 내용을 Swift 코드와 함께 진행해보도록 하겠습니다.

 

 

댓글