본문 바로가기
Web/ETC

자료 구조의 Array와 Tuple

by 긴모양 2020. 5. 13.

자료구조 == 비단순 구조 none-primitive Data Structure

상황과 문맥에 맞게 데이터를 담을 수 있는 적절한 자료 구조로, 데이터에 편리하게 접근하고 조작하기 위한 데이터를 저장하거나 조직하는 것. 데이터에 맞는 적절한 자료 구조를 사용하는 것이 전체 개발 시스템에 큰 영향을 끼친다. 

  • Array
  • Tuple
  • set
  • Dictionary
  • stack&Queue
  • Tree

 

Array []


가장 기초적이면서도 단순한 자료 구조로 가장 자주 사용된다.

특징

  • 순차적으로 데이터를 저장하는 것
  • 순서에 상관없이, 서로 연결된 데이터들을 순차적으로 저장시 사용 
  • 넣는 순서대로 저장이 된다.
  • 생성된 리스트의 수정이 가능하다. 
  • 동일값 여러번 삽입 가능.
  • 다중차원 배열(Multi-dimentional Array) : array의 요소가 array가 될 수 있다.
X = [[1,2,3], [4,5,6], [7,8,9]]

// 만약 5라는 값을 찾고싶다면? X[1][1]

 

내부구조

순차적으로 저장된 값들의 번호를 index라고 한다. index는 0부터 시작을 하며 -를 가지는 것 또한 가능하다. -index는 맨 마지막 요소부터 시작을 한다. 마지막 부터 시작하는건 0이 아니라 -1부터 시작이다.

X = [[1,2,3], [4,5,6], [7,8,9]]

// 8을 뒤에서 부터 찾고싶다면? X[-2]

 

순차적인 이유는?

실제 메모리에서 물리적으로 데이터가 순차적으로 저장된다. 데이터는 순서가 있기에 index가 존재하며 0부터 시작하는 index / index를 사용해 특정 요소를 읽는 것이 가능하고 (indexing) / 요소의 특정 부분을 분리해 조작이 가능하다. (Slicing)

 

단점

  • Add element, Remove element
    중간의 특정 요소를 삭제해야 하는 경우에 메모리가 순차적이기에 삭제된 요소로 부터 뒤에 있는 모든 요소들을 앞으로 한칸씩 이동 시켜줘야한다. = 느리다. / 삭제 과정이 코드상에선 한 줄로 보이지만 메모리에서 실제 이뤄지는 것은 훨씬 크다. 동일하게 중간에 추가되는 요소 또한 그러하다. => 정보가 자주 삭제되거나 추가되는 데이터를 담는 것은 적절치 못하다.
  • Array Resizing
    배열이 처음 생성될 때 어느정도 메모리를 미리 할당한다. pre-allocation. 요소들이 처음 할당한 메모리 이상으로 많아지면 resizing이 필요하다. 메모리를 더 할당해야한다. 추가로 할당된 메모리 또한 순차적이다. 10개의 메모리가 다 차서 20개를 추가 생성해야하는 경우에는 30개 크기의 메모리를 새로 생성후 -> 기존의 10개를 복사 -> 그 다음 31번째부터 데이터 순차적 추가 가능 / 사이즈 예측이 어려운 데이터를 다루기는 적절하지 못하다. 

 

그럼 배열은 언제 사용하면 좋은거야?

  • 순차적인 데이터를 저장할 때
  • 다차원의 데이터를 다룰 때
  • 특정요소를 index로 읽어야 할 때
  • 데이터의 사이즈가 급변하지 않을 때
  • 요소가 자주 삭제되거나 추가되지 않을 때

 


Tuple ()


얘도 순차적으로 저장이 가능한 순열 자료 구조, array와의 차이점은 한 번 정의되고 나면 수정이 불가능하다.(immutable). 2-3개의 적은 수의 소규모 데이터 저장시 사용

장점

  • 간단한 값을 빠르게 표현하고 싶을 때, 함수에서 리턴값을 한개 이상 리턴하고 싶을 때

단점

  • 데이터가 무슨 의미인지 의미 불명확하기에 문맥을 보고 가정을 해야한다.(추측이 다소 필요)

 

그럼 튜플은 언제 사용하면 좋은거야?

  • 간단한 데이터들을 표현시 array보다 가볍고 메모리 사용이 덜 하다. 

 

array와 Tuple의 차이점은 array는 (), Tuple은 []를 사용하며, 추후에 값이 변할 수 있고 없고의 차이가 존재한다. 

'Web > ETC' 카테고리의 다른 글

HTTP  (0) 2020.05.20
POST Man  (0) 2020.05.18
웹은 어떻게 작동할까? 네트워크 OSI 7계층 모델  (0) 2020.05.12
웹이 작동하는 방법  (0) 2020.05.09
git과 github | 로컬 저장소를 터미널에서 활용하기  (0) 2020.04.30

댓글