Data Sturcture의 개념
'자료 구조' : 데이터에 편리하게 접근하고 조작하기 위해 데이터를 저장하거나 조작하는 방법
모든 목적에 부합하는 자료구조는 없기 때문에 각각의 목적에 맞는 자료구조 종류를 선택
-> 상황에 맞게 올바른 자료 구조를 선택하는 것이 전체 개발 시스템이 큰 영향을 끼친다
" 코딩은 알고리즘과 자료구조, 이 두가지로 이루어진다 "
ex) 화장품을 담을때 캐리어보다 파우치를 선택하는 것처럼!
언어에 따라서도 자료구조 양상이 다름
Primitive Data Structure (단순구조)
-- 프로그래밍에 사용되는 기본 데이터타입
None-primitive Data Structure (비단순 구조)
List에서
: 구조 []
js에서는 Array = Python에서는 List
가장 기초적이고 단순하면서 가장 자주 사용되는 자료 구조
순차적으로 데이터를 저장하는 자료 구조(ordered)
부르는 번호는 '인덱스 (index)' / 마이너스는 맨마지막 요소부터 시작 -1
저장되는 데이터를 '요소 (element)'
실제 메모리상에서 물리적으로 데이터가 순차적으로 저장되기 때문에 array도 순차적으로 데이터를 저장
서로 연결된 데이터들을 저장할 때 사용
(엄밀히 말하자면 Array와 List는 다르다. 기능적으로는 거의 동일하지만 메모리 효율면에서는 Array가 유리. 사용하기에는 List가 더 편하다 Python에서는 import Array 모듈을 import해서 사용)
** 다중차원배열 (multi-dimensional Array)
: array 안에 array 요소
array 안에 중간의 특정 요소를 삭제하거나 추가하는 경우
: 메모리가 순차적으로 이어져있기 때문에 중간 요소가 삭제/추가 되면 뒤에 있는 모든 요소들이 유기적으로 앞/뒤로 이동해야한다 = 다른 자료구조에 비해 느릴 수 있다
실제 메모리상에서 이루어지는 작업이 훨씬 커진다 (expensive operation)
따라서 array 는 정보가 자주 삭제되거나 추가되는 데이터를 담기에 적절하지 않다
Array Resizing
: 메모리가 순차적으로 채워지기 때문에 배열이 어느정도 생성될 때 어느정도의 메모리를 할당 = pre-allocation
새로 요소들이 추가될 수록 할당한 메모리의 이상이 되어버리면 resizing 필요
추가된 메모리들도 순차적으로 진행 = 오래걸리는 operation
따라서 array는 사이즈 예측이 잘 안되는 데이터를 다루기에 적합하지 않다
그럼 언제 Array를 사용하는가?
: 구조 () 데이터를 순차적으로 저장할 수 있는 순열 자료구조 but list와 다르게 immutable (한번 정의되면 수정될 수 없다)
2-3개 정도의 적은 수의 소규모 데이터를 저장할 때 많이 사용
Python에는 있지만 js에는 tuple이 없다
리턴값을 한 개 이상 리턴하고 싶을 때 자주 사용 ex) 지도 좌표 (23,14)
array보다 더 가볍고 메모리를 적게 먹는다
데이터가 무슨 의미인지 명확하지 않다
: key-value쌍의 데이터 형태가 아니고 괄호안에 데이터만 담겨있기 때문에 문맥에 맞게 의미를 추측해야 한다.
따라서 tuple은 소규모 데이터를 다루기에 적합하다