자료구조 == 비단순 구조 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 |
댓글