Data Structure_01 Intro, Array & Tuple

NaHyun Kim·2020년 5월 11일
0

Data Structure(자료 구조)란?

  • 자료 구조란 데이터에 편리하게 접근하고 조작하기 위한 데이터를 저장하거나 조직하는 방법이다.

  • 자료 구조의 종류에는 여러가지가 있지만 모든 목적에 부합하는 자료구조는 없다. 따라서 각각의 자료구조가 갖는 장점과 한계를 잘 이해하고 상황에 맞게 올바른 자료 구조를 선택하고 사용하는 것이 중요하다.

  • 자료구조는 언어별로(ex. JavaScript, Python...) 지원하는 양상이 다르며 각 언어가 가진 자료구조의 종류와 그것에 대한 사용 방법을 익히는 것이 중요하지만, 무엇보다 각 자료구조의 본질과 컨셉을 이해하고 상황에 맞는 적절한 자료 구조를 선택하는 것이 중요하다.(언어별로 지원하는 자료구조의 양상이 다르더라도 개념을 올바르게 이해한다면 해당 언어에 맞추어서 사용하기만 하면 됨)

    * 데이터에 맞는 적절한 자료 구조를 사용하는 것은 전체 개발 시스템에 굉장히 큰 영향을 끼친다.


자료 구조의 분류

  • Primitive Data Structure(단순 구조)
    : 프로그래밍에서 사용되는 기본 데이터 타입
  • None-Primitive Data Structure(비단순 구조)
    : 단순한 데이터를 저장하는 구조가 아니라 여러 데이터를 목적에 맞게 효과적으로 저장하는 자료 구조
    - Linear Data Structure(선형 구조)
    : 저장되는 자료의 전후 관계가 1:1 (ex. List, Stacks, Queues)
    - Non-Linear Data Structure(비선형 구조)
    : 데이터 항목 사이의 관계가 1:n 또는 n:m (ex. Graphs, Trees )

Array의 정의 및 특징

  • JavaScript 에서는 Array, Python에서는 List
  • Array(List)는 가장 기초적이고 단순하면서도 가장 자주 사용 되는 자료 구조이다.
    일반적으로 Python 에서는 Array 보다 일반 List 가 더 많이 사용 되고 대부분의 경우 큰 차이가 없음으로 그냥 List 를 사용하면 된다.
    *사실 Python 에서는 List 가 Array 라고 생각하고 써도 무방하다. 다만 엄밀히 말하자면 Array 와 List 는 기능적으로는 거의 동일하지만 메모리 효율면에서는 Array 가 유리하다. 다만 사용하기에는 List 가 훨씬 편함 (Python 에서 Array 를 사용하려면 import Array 모듈을 import 해서 사용해야 한다.)

순차적으로 데이터를 저장하는 자료 구조

  • Array의 가장 큰 특징은 순차적(ordered)으로 데이터를 저장한다는 점이다.
  • 자료구조에 저장하는 데이터는 일반적으로 요소(element)라고 한다.
  • Array는 주로 서로 연결된 데이터들을 순차적 으로 저장할때 사용되며 순서가 상관 없더라도 서로 연결된 데이터들을 저장할때 일반적으로 사용된다.
  • 이렇게 순서가 있다보니 당연히 순차적으로 번호를 지정할 수 있다. 이 번호를 index 라고 하며 Index는 0부터 시작된다. (Index는 마이너스 부호를 가질 수도 있음) 마이너스 index는 맨 마지막 요소 부터 시작 된다. (ex. -1 은 맨 마지막 요소)

기타 특징

  • 삽입(insertion) 순서대로 저장된다. (즉, 새로 삽입되는 요소는 array의 새로운 꼬리가 된다)
  • 이미 생성된 리스트도 수정 가능하며(mutable) 동일한 값도 여러번 삽입 가능
  • Array의 요소가 array가 될 수 있다. 이러한 array를 다중차원(multi-dimentional) array라고 한다. (일반적으로 2D (2차원) array가 많이 사용)

단점

  • Removing or Adding Elements

    순차적으로 담겨있는 데이터 중 특정 위치에 있는 중간의 요소가 삭제 되는 경우에 항상 메모리가 순차적으로 이어져있어야 하기 때문에 삭제된 요소로 부터 뒤에 있는 모든 요소들을 앞으로 한칸씩 이동시켜주어야 한다. 이뜻은 배열에서 요소를 삭제하는 것은 다른 자료 구조에 비해 느릴 수 있다는 뜻이다. 중간에 요소가 추가 되는 경우도 마찬가지 이다. 특정 위치에 새롭게 요소가 추가되는 경우에는 그 뒤의 요소들이 하나씩 밀리게 된다. 그렇기 때문에 Array 는 정보가 자주 삭제 되거나 추가되는 데이터를 담기에는 적절치 않다.

Tuple의 정의 및 특징

  • list와 마찬가지로 데이터를 순차적으로 저장할 수 있는 순열 자료 구조이다.
  • 하지만 list와 다르게 한 번 정의되고 나면 수정 할 수 없다. (immutable)
  • 2-3개 정도의 적은 수의 소규모 데이터를 저장할 때 많이 사용된다.
  • 함수에서 리턴값을 한 개 이상 리턴하고 싶을 떄 자주 쓰인다.

장점

  • tuple은 간단한 값을 빨리 표현하고 싶을 때 많이 사용한다.
    (예를 들면, 함수에서 리턴 값을 한 개 이상 리턴 하고 싶을 경우)

단점

  • Tuple의 단점은 데이터가 무슨 의미인지 명확하지 않다는 것이다.
  • 데이터의 의미를 문맥을 보고 가정해야 한다.
  • 그렇기 때문에 Tuple은 소규모 데이터를 다루기에 적합하다.

그렇다면 언제 사용하면 좋을까?

  • Array(list)를 쓰기에는 간단한 데이터들을 표현할 때 사용한다.
  • Tuple이 Array(List)보다 더 가볍고 메모리를 더 적게 먹는다.

0개의 댓글