Session - 자료구조 (Array & List & Tuple)

Sung Jun Jin·2020년 4월 6일
0

위코드 세션 정리

목록 보기
4/12

자료 구조란?

  • 데이터에 편리하게 접근하고 조작하기 위한 데이터를 저장하거나 조작하는 방법
  • 자료구조는 목적에 따라 각각의 쓰임새가 다르므로, 상황에 맞게 올바른 자료구조를 선택하고 사용하는 것이 중요하다

자료 구조의 분류

  • Primitive Data Structure (단순 구조) : 프로그래밍에서 사용되는 기본 데이터 타입
    ex) Intenger, Float, Char, Boolean

  • Non-Primitive Data Structure (비단순 구조) : 단순한 데이터를 저장하는 구조가 아니라 여러 데이터를 목적에 맞게 효과적으로 저장하는 자료 구조

    • Linear Data Structure(선형 구조) : 저장되는 자료의 전후 관계가 1:1 ex) List, Stack, Que
    • Non-Linear Data Structure(비선형 구조) : 데이터 항목 사이의 관계가 1:n 또는 n:m ex) Graphs, Trees

Array & List의 특성

JavaScript에서는 Array, Python에서는 List로 불리는 구조이다. Python에서 엄밀히 따지자면 Array와 List는 다르다. 효율적인 면에서 Array가 더 유리하지만 사용하기에는 List가 더 편하다.
Python에서 Array를 사용하려면 Array Module을 import해야한다.

List의 가장 큰 특징은 순차적(ordered)으로 데이터를 저장한다는 점이다. 즉, 삽입 순서대로 데이터가 저장되며 일반적으로 서로 연결된 데이터들을 저장할때 사용된다.

List의 내부 구족는 다음과 같다.

메모리상에서도 물리적으로 데이터가 순차적으로 저장된다. 따라서 순서가 있기 때문에 index가 존재하여 배열에 각 요소에 빠르게 접근할 수 있는 Indexing, 요소의 특정 부분을 따로 분리할수 있는 Slicing이 가능하다.

list_num = [1,2,3,4,5,6]

# Indexing
print(list_num[2]) # 출력 3

# Slicing
print(list_num[3:7]) # 출력 [4,5,6]

List의 중간에 있는 요소를 삭제할 경우, 다음과 같은 작업이 이루어진다.

삭제된 요소의 뒤에 있는 모든 요소들을 앞으로 한번씩 옮겨줘야 하는 메모리상의 작업때문에 다른 자료구조에 있어서 요소를 삭제하는 연산이 느릴수 있다. 따라서 정보가 자주 삭제되거나 추가되는 데이터를 담기에는 적절하지 않다.

Array Resizing

Array는 메모리가 순차적으로 채워지기 때문에, 할당전 어느 정도 메모리를 미리 할당한다. 이를 Pre-Allocation이라고 한다. Array를 계속 채워나가다 요소들이 처음 할당한 메모리 사이즈 이상으로 많아진다면 Array Resizing이 필요하다.

예를 들어 100개의 Array가 다 차서 resizing이 필요할 경우 메모리상에서 수행되는 작업의 순서이다.

  1. 200개의 메모리를 생성
  2. 기존 100개를 새롭게 생성한 메모리에 복사
  3. 101번 index부터 데이터가 새롭게 추가

상대적으로 오래 걸리는 작업이기 때문에 메모리 사이즈의 예측이 불가능한 자료를 담기에는 적절하지 않다.

Tuple의 특성

Tuple은 Python에서 제공하는 순열 자료구조이다. 하지만 요소의 수정이 불가능(immutable)하다는 것이 List와는 다른 점이다. 주로 좌표와 같은 간단한 데이터들을 표현할 때 사용된다.

coords = [(1,2),(3,4),(32,5)]

print(coords)

위의 예시와 같이 변수명(coords)를 가지고 데이터의 의미를 파악해야 하기 때문에 복잡한 데이터를 다루기에는 적합하지 않다. 이러한 단점을 극복하기 위해 Python에서는 Named Tuple이란 것도 존재한다. Named Tuple은 Python의 collections를 import해서 사용할 수 있다.

정리하자면 immutable한 특성을 가지고 있는 Tuple은 List보다 메모리를 더 적게 사용하므로, 간단하고 변하지 않는 데이터를 표현할 때 유용하다.

profile
주니어 개발쟈🤦‍♂️

0개의 댓글