자료구조는 상황과 문맥에 맞게 데이터를 담을 수 있는 적절한 구조이다. 데이터에 적절한 자료구조를 사용하는 것은 전체 개발 시스템에 굉장히 큰 영향을 끼치기 때문이다.
JavaScript에서는 Array, Python에서는 List이다. Array(List)는 가장 기초적이고 단순하면서도 가장 자주 사용되는 자료구조라고 할 수 있다. Array의 가장 큰 특징은 데이터를 순차적으로(ordered) 저장한다는 점이다. 순서가 상관 없어도 서로 연결된 데이터들을 저장할때 사용된다.
삽입 순서대로 저장되기 때문에 새로 삽입된 요소는 array의 끝에 저장된다. 이미 생성된 리스트도 수정이 가능하며, 동일한 값도 여러번 삽입이 가능하다. Multi-dimentional Array(다중차원 배열)도 가능한데, Array요소가 array안에 들어갈 수 있다. 일반적으로 2차원 array가 많이 사용된다.
A = [[11,12,13], [22,24,26], [33,36,39]]
Array는 요소마다 index를 가지고 있다. index는 0부터 시작되며, 마이너스 부호로 맨 마지막 요소를 불러올 수 있다. 예를 들어, -1은 맨 마지막 요소이다. Array는 실제 메모리 상에서, 즉 물리적으로 데이터가 순차적으로 저장되기 때문에 순차적으로 데이터를 저장할 수 밖에 없다.
indexing이 가능하다는 점을 비롯하여 여러 장점이 있음에도 불구하고, 이 점 때문에 단점도 존재한다.
List와 마찬가지로 데이터를 순차적으로 저장할 수 있는 순열 자료구조이다. 하지만 한번 정의되고 나면 수정할 수 없으며, 2-3개 정도의 적은 수의 소규모 데이터를 저장할 때 많이 사용한다. 함수에서 리턴 값을 한개 이상 하고 싶을때 자주 쓰인다. Tuple은 파이썬에는 있지만 JavaScript에는 없다.
간단한 값을 빨리 표현하고 싶을 때 주로 사용한다. 예를 들어 함수에서 리턴 값을 한 개 이상 리턴하고 싶을 경우 (지도 좌표)
// Tuple을 사용하는 경우
[(1,2), (2,4)] // Array(List) 안의 Tuple
// Tuple을 안 쓰는 경우에는 class를 생성해야함
class cord:
def __init__(self, x, y):
self.x = x
self.y = y
Tuple은 객체처럼 key-value 쌍으로 이루어지지 않고 괄호 안에 데이터만 담겨있기 때문에 데이터가 무슨 의미인지 명확하지가 앖다. 따라서 데이터의 의미를 문맥을 보고 가정해야 한다. Tuple은 소규모 데이터를 다루기에 적합하다.
자료 구조란 데이터의 편리한 접근과 조작을 가능하게 하는 데이터를 저장하거나 조직하는 방법입니다. 문맥과 데이터의 종류에 따라 적절한 자료 구조를 사용하는 것은 전체 개발 시스템에 큰 영향을 끼칩니다. 그렇기 때문에 자료구조의 다양한 종류와 각각의 장점과 한계를 잘 이해하고 상황에 맞게 올바른 자료 구조를 선택하고 사용하는 것이 중요합니다.
Array의 가장 큰 특징은 순차적으로 데이터를 저장한다는 점입니다. 이렇게 데이터에 순서가 있기 때문에 0부터 시작하는 index가 존재하며, index를 사용해 특정 요소를 찾고 조작이 가능하다는 것이 Array의 장점입니다. 반면에 이에 따른 단점도 존재하는데, 순차적으로 존재하는 데이터의 중간에 요소가 삽입되거나 삭제 되는 경우 그 뒤의 모든 요소들을 한칸씩 뒤로 밀거나 당겨줘야 하는 단점이 있습니다. 이러한 경우 메모리 상에서 이루어지는 작업이 다른 자료구조에 비해 커지기 때문에 Array 는 정보가 자주 삭제 되거나 추가되는 데이터를 담기에는 적절치 않습니다.
Array를 적용시키면 좋은 예로 주식 차트가 있습니다. 주식 차트에 대한 데이터는 요소가 중간에 새롭게 추가되거나 삭제되는 정보가 아니며, 날짜별로 주식 가격이 차례대로 저장되어야 하는 데이터입니다. 즉, 순서가 굉장히 중요한 데이터 이므로 Array 같이 순서를 보존 해주는 자료구조를 사용하는 것이 좋습니다. 이와 같은 데이터에 Array를 사용하지 않는 경우, 즉 순서가 없는 자료 구조를 사용하는 경우에는 날짜별 주식 가격을 확인하기 어려우며 매번 전체 자료를 읽어 들이고 비교해야 하는 번거로움이 발생합니다.