자료 구조-1 Array, Tuple

jjunn0·2020년 4월 6일
0

자료 구조?

자료 구조는 데이터에 편리하게 접근하고 조작하기 위한 데이터를 저장하거나 조직하는 방법입니다.
각각의 자료 구조가 갖는 장점과 한계를 잘 이해하고 상황에 맞게 사용해야겠죠?🚣
리누스 토르발스가 "코딩은 알고리즘과 자료구조, 이 두가지로 이루어진다" 라고 말했다네요?🥴

Array

Array는 순차적으로 데이터를 저장합니다. 그래서 요소(데이터, element) 들을 순차적으로 저장할 때 유리합니다.
순서가 상관 없더라도 서로 연결된 데이터를 저장할 때 일반적으로 사용도비니다,.

보통 insertion 순서대로 저장됩니다.
이미 생성된 리스트도 수정 가능합니다.
동일한 값도 여러번 삽입 가능합니다.

Multi-dimentional Array(다중차원 배열)
A = [[1,2,3],[4,5,6],[7,8,9]]


   0 1 2
   / / /
0/ 1 2 3
1/ 4 5 6
2/ 7 8 9

위와 같이 보통 2차원 배열을 많이 사용합니다.
Array의 장점이 순차적 이라는 것인데, 이는 각 index를 매겨 정보를 저장합니다.
index는 0부터 시작되지만, - 부호를 가질때 뒤에서 부터 시작합니다. -1은 맨뒤 -2는 맨뒤에서 두번째...

실제 메모리 상에서 데이터가 순차적으로 저장되기 때문에 즉, 데이터에 순서가 있기 때문에
indexing, Slicing이 가능합니다.

단점

중간에 특정요소를 삭제해야 하는 경우.
중간에 요소를 추가하는 경우.

삭제하고 싶은 요소 뒤 부터 앞으로 한칸씩 이동시켜줘야 합니다.🤓
이는, 다른 자료구조에 배해 느릴 수 있습니다.
코드는 짧지만, 실제 메모리 상에서 이루어지는 작업은 훨씬 커지기 때문입니다. (expensive operation)

이러한 이유 때문에 Array는 정보가 자주 삭제 되거나 추가되는 데이터를 담기에는 적절치 않습니다.! 💀

Array resizing

Array는 생성될 때 어느 정도 메모리를 미리 할당하빈다. (pre-allocation)
하지만 요소가 할당한 메모리보다 더 많아지면 resizing이 필요합니다. resizing에 할당하는 메모리 또한 순차적이여야 합니다. 그러므로 Array의 resizing은 상대적으로 오래걸리는 operation입니다.

메모리 공간이 다 찰 경우, 더 큰 메모리 공간은 생성해서 앞서 있던 요소들을 복사 후 더 큰 메모리 공간에 복사합니다. 🤢 그 후 남은공간에 요소가 순차적으로 추가됩니다....

Array 는 사이즈 예측이 잘 안 되는 데이터를 다루기에는 적절치 않습니다.

다음 상황일 때 적합합니다.
순차적인 데이터를 저장할 때(값보단 순서가 중요한 데이터)
다차원 데이터를 다를 때
어떠한 특정 요소를 빠르게 읽어야 할 때 (index로 바로 읽을 수 있음)
데이터 사이즈의 급변이 자주 일어나지 않을 때
요소가 자주 삭제 되거나 추가되지 않을 때

Tuple

List와 마찬가지로 데이터를 순차적으로 저장할 수 있는 순열 자료구조입니다.
정의되고 나면 수정할 수 없습니다.
2~3개의 요소를 가진 소규모 데이터를 저장할 때 많이 사용합니다.
함수에서 리턴값을 한개 이상 하고싶을 때 사용됩니다.

Python에는 있고, javascript엔 없습니다. 굳이 안써도 됩니다.

간단한 값을 빨리 표현할 수 있습니다.

데이터가 무슨 의미인지 명확하지 않습니다.

profile
서울로 상경해 매일매일 생존기를 찍고 있는 Front end 개발자 최준영입니다 🥰

0개의 댓글