View

Data Structure(자료 구조)란?

데이터에 쉽게 접근하고 조작하기 위한 데이터를 저장하거나 조직하는 방법이다. 자료구조는 언어별로 지원하는 양상이 다르며, 종류도 여러가지 존재한다. 하지만 모든 목적에 부합하는 자료구조는 존재하지 않는다. 따라서 각각의 자료구조가 갖는 장점과 한계를 잘 이해하고 상황에 맞게 올바른 자료 구조를 선택하고 사용하는 것이 중요하다.
자료구조에서 가장 중요한것은 각 자료구조의 본질과 컨셉을 이해하고 상황에 맞는 적절한 자료구조를 선택하는것이다. 개념을 올바르게 이해한다면 해당 언어에 맞추어서 사용할 수 있다.

데이터에 맞는 적절한 자료구조를 사용하는 것은 전체 개발 시스템에 굉장히 큰 영향을 끼친다.

 

자료구조가 중요한 이유

더보기

자료구조는 적은 수의 데이터를 관리하기 위해 만들어진것이 아니다. 자료구조는 1개의 데이터를 처리하는 시간과 크기를 줄여 데이터를 처리하는데 더 적은 크기와 더 적은 시간이 필요하게끔 하는 역할을 합니다.

따라서 자료구조가 중요한 이유는 프로그램 내에서 자료를 가장 효율적으로 처리하기 위함이고, 그것을 통해 보다 성능 좋은 프로그램을 만들기 위함입니다

 

 

 

 자료구조의 분류 

 

 

Primitive Data Structure(단순 구조)

: 프로그래밍에서 사용되는 기본적인 데이터 타입의 자료구조이다.

 

 

None-Primitive Data Structure(비단순 구조)

: 단순하게 데이터를 저장하는 구조가 아닌 여러 데이터를 목적에 맞게 효과적으로 저장하는 자료구조이다.

 

 

Linear Data Structure(선형 구조)
: 저장되는 자료의 전후 관계가 1:1 (ex. List, Stacks, Queues)

 


Non-Linear Data Structure(비선형 구조)
: 데이터 항목 사이의 관계가 1:n 또는 n:m (ex. Graphs, Trees)

 

 


 

 

 Array 자료구조 

 

 

Array의 특징

: 프로그래밍에서 사용되는 기본적인 데이터 타입의 자료구조이다.순차적으로 데이터를 저장하는 구조이다. 자료구조에 저장하는 데이터는 일반적으로 요소라고 한다. array는 주로 서로 연결된 데이터들을 순차적으로 저장할 때 사용한다. 따로 데이터에 순서가 없더라도 서로 연결되어있다면 array를 사용할 수 있다. 이러한 이유때문에 가장 자주 사용되는 자료구조 중 하나로 뽑힌다.

기타적인 특징
삽입된 순서대로 저장된다. 가장 마지막에 저장된 요소는 array의 꼬리가 된다. 이미 생성된 리스트도 수정이 가능하며, 동일한 값을 여러번 삽입할 수도 있다. 

※ Multi-dimensional Array(다중차원 배열)
Array는 내부의 요소가 array가 될 수 있다. 이러한 배열을 다중차원배열이라고 한다. 일반적으로 2b(2차원)배열을 많이 사용한다.

 

 

Array의 내부구조

: 순차적으로 데이터를 저장하다보면 순사적으로 번호를 지정할 수 있다. 이러한 번호를 index라고 하며, index요소는 0부터 시작한다. 마이너스 부호를 가질 수 있으며, 마이너스 index는 맨 마지막 요소부터 시작한다.(-1은 맨 마지막 요소로 분류된다.)

 

Array가 순차적으로 데이터를 저장하는 이유는 실제 메모리 상에서, 즉 물리적으로 데이터가 순차적으로 저장되기 때문이다. 데이터에 순서가 있기 때문에 index가 존재함, indexing이 가능하고, sicing로 조작할 수 있다.

 

※ Indexing : index를 이용해 특정 요소를 array로부터 읽어 들이는 것.
Slicing : 요소의 특정 부분, 즉 n번째 index부터 m번째 index까지 따로 분리해 조작하는것.

 

Array의 단점

: Array는 메모리의 실제 주소도 순차적으로 되어있다. 그렇기 때문에 여러가지 장점도 존재하지만 단점 또한 존재한다. 

 

1. Removing or Adding Elenents

array는 정보가 자주 삭제되거나 추가되는 데이터를 담기에는 적절하지 않다. 예를 들어 가운데 있는 배열을 삭제한다면, array는 항상 메모리가 순차적으로 이어져있어야하기때문에 삭제된 요소로부터 뒤에 있는 모든 요소들이 앞으로 한칸씩 이동해야한다. 이러한 이유때문에 배열에서 요소를 삭제하는 것은 다른 자료구조보다 느릴 수 있고, 코드의 길이보다 실제 메모리상에서 이루어지는 작업은 훨씬 커진다.

 

2. Array Resizing

Resizing은 사이즈를 조정한다는 뜻으로, 배열을 처음 작성했던 메모리보다 할당 메모리가 많아진다면 resizing이 필요하다. 메모리를 추가할당해야하는것이다. 또한 추가적으로 할당된 메모리 또한 순차적이여야한다. 이러한 이유때문에 배열의 resizing은 상대적으로 오래걸린다.

그렇기때문에 array는 사이즈 예측이 잘 안되는 데이터를 다루기에는 적절하지 않다. 사이즈가 급격하게 자주 늘어날 확률이 있는 데이터는 array말고 더 적합한 자료구조를 선택해야한다.

 

※ pre-allocation : 배열은 메모리가 순차적으로 채워지기 때문에 배열이 처음 생성될 때 어느정도 메모리를 미리 할당하는 것.

 

그렇다면 언제 사용하는 것이 좋을까?

더보기

순차열적인 데이터를 저장할때(값보다는 순서가 중요한 데이터) 

다차원 데이터를 다룰 때 

어떠한 특정 요소를 빠르게 읽어야 할때(index를 통해 곧바로 읽을 수 있음) 

데이터의 사이즈가 급격하게 자주 변하지 않을 때 

요소가 자주 삭제되거나 추가되지 않을 때 

 

 


 

 Tuple 자료구조 

 

 

Tuple의 특징

: list와 마찬가지로 데이터를 순차적으로 저장 할 수 있는 순열 자료구조다. 하지만 list와 다르게 한번 정의되고 나면 수정할 수 없다. 2~3개 정도의 적은 수의 소규모 데이터를 저장할 때 많이 사용한다. 함수에서는 리턴값을 한개 이상 리턴하고 싶을 때 사용한다.

 

 

Tuple의 장점

: Tuple은 간단한 값을 빨리 표현하고 싶을 때 적합하다.

 

 

Tuple의 단점

: 단점은 데이터가 무슨 의미인지 명확하지 않다는것이다. 예를 들어 객체는 key-value가 한쌍으로 이루어진 데이터이기때문에 무슨 데이터인지 파악하기 쉽지만 Tuple은 괄호안에 데이터만 담겨있기때문에 문맥에 맞게 의미를 추측해야한다. 이러한 단점때문에 Tuple은 소규모 데이터를 다룰때 적합하다.

 

 

그렇다면 언제 사용하는 것이 좋을까?

더보기

Array(List)를 쓰기에는 간단한 데이터들을 표현할 때

 

 

'Assignment' 카테고리의 다른 글

React 초기세팅 해보자!  (0) 2020.08.06
HTTP을 알아보자  (0) 2020.08.05
JavaScript repl 문제  (0) 2020.07.26
Semantic Web과 Semantic Tag(20 작성글)  (0) 2020.07.20
레이아웃의 모든 것 (18-2 작성글)  (0) 2020.07.20
Share Link
reply
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31