Data Structure (자료구조) , Array&Tuple

HELLO WORLD🙌·2020년 5월 11일
0

TIL

목록 보기
4/23


언제 이 데이터구조를 활용하면 좋은지에 초점을 맞춰 공부해야한다

Data Structure(자료 구조)란?

데이터에 편리하게 접근하고 조작하기 위해 데이터를 저장하거나 조직하는 방법
상황과 문맥에 맞게 데이터를 담을 수 있는 적절한 구조를 말한다.

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

메모리의 효율적인 사용 - 프로그램의 실행시간 효율과 저장공간 효율성을 높인다.

자료 구조의 분류

  • 단순구조
  • 비단순 구조 :여러 데이터를 목적에 맞게 효과적으로 저장하는 자료 구조
    1) 선형 구조 : 저장되는 자료의 전후 관계가 1:1 (ex. List, Stacks, Queues)
    2) 비선형 구조 :데이터 항목 사이의 관계가 1:n 또는 n:m (ex. Graphs, Trees )

Array(List)

1. 특징

  • 순차적(ordered)으로 저장한다 : index를 가진다 (0부터 시작, 마이너스 부호는 맨마지막 요소부터 시작)
  • 순서가 상관 없더라도 서로 연결된 데이터들을 저장할때 사용한다.
  • 삽입 순서대로 저장된다.
  • 이미 생성된 리스트도 수정 가능하다(mutable)
  • 값 중복 가능
  • 다중차원배열(Multi-dimentional Array)

2. 왜 Array가 순차적으로 데이터를 저장할 수 밖에 없을까?

실제 메모리 상에서, 즉 물리적으로 데이터가 순차적으로 저장되기 때문이다. 따라서

  • index가 존재
  • indexing : index를 사용해서 특정 요소를 array로부터 읽어들일 수 있다
  • Slicing : 요소의 특정부분을 따로 분리해 조작가능하다.

3. 단점

1. 항상 메모리가 순차적으로 이어져있어야하기 때문에, 요소를 삭제하거나 추가하는 경우

  • 나머지 요소들을 다시 이동시켜야한다 : 다른 자료 구조에비해 느리다.
  • 코드상에는 한 줄 이어도, 실제 메모리 상에서 이루어지는 작업은 훨씬 크다(expensive operation)

그렇기 때문에 Array 는 정보가 자주 삭제 되거나 추가되는 데이터를 담기에는 적절치 않다.

2. Array Resizing

  • 배열은 메모리가 순차적으로 채워지기 때문에 배열이 처음 생성될 때 어느 정도 메모리를 미리 할당한다(pre-allocation)
  • 새로 추가되는 요소들도 순차적으로 할당된 메모리에 저장되지만, 요소들이 메모리 이상으로 많아지면 resizing 해야한다.
    (새로 더 큰 메모리를 생성하고, 기존 데이터를 복사해넣고, 그 다음에 데이터를 추가)-> 오래걸림!

그렇기 때문에 Array 는 사이즈 예측이 잘 안 되는 데이터를 다루기에는 적절치 않다.

4. 언제 사용해야할까

  • 순차적인 데이터를 저장할떄 (ex.주식가격:값보다는 순서가 중요할때)
  • 다차원 데이터를 다룰때
  • 특정 요소를 빠르게 읽어야할때 (index로 가능)
  • 데이터 사이즈가 자주 변하지 않을때
  • 요소가 자주 삭제 되거나 추가되지 않을 때

Tuple

1. 특징

  • 데이터를 순차적으로 저장할 수 있는 순열 자료구조
  • 한 번 정의되고 나면 수정할 수 없다(immutable)
  • 2-3개 정도의 적은 수의 소규모 데이터를 저장할 때 많이 사용한다

2. 장점

  • 간단한 값을 빨리 표현하고 싶을 때
  • 함수에서 리턴 값을 한 개 이상 리턴하고 싶을 경우 (ex. 지도 좌표)

3. 단점

  • 데이터가 무슨 의미인지 명확하지 않다(문맥을 보고 파악해야한다)

4. 언제 사용해야할까

  • Array(List)를 쓰기에는 간단한 데이터들을 표현할 때
    더 가볍고 메모리가 적다.
    ex) 좌표 데이터 (파이썬)
    coordinations = [
       (1, 2),
       (3, 4),
       (5, 6)
    ] 

0개의 댓글