Wecode/Session

Session-자료 구조(Data Structure)란? , Array(List), Tuple

청렴결백한 만능 재주꾼 2020. 5. 11. 15:20
반응형

오후에 또 세션이 있네.

 

데이터 구조란 무엇인지, 왜 중요한지, 그리고 데이터 구조의 종류 중 첫 번째로 Array와 Tuple에 대해 배워보도록 한다.

 

 - Data Structure 의 개념 필요성, 그리고 다양한 종류의 자료구조에 대한 이해

 - Array의 개념과 장점, 단점, 그리고 언제 사용하면 좋을지

 - Tuple의 개념과 장넘, 단점, 그리고 언제 사용하면 좋을지

 

5주간 배워나갈텐데 열심히 해보자~

#A. 자료 구조

###1. Data Structure(자료 구조)란?

 - 자료 구조란 데이터에 편리하게 접근하고 조작하기 위한 데이터를 저장하거나 조직하는 방법

 - 자료 구조의 종류에는 여러가지가 있다. 하지만 모든 목적에 부합하는 자료구조는 없다. 따라서 각각의 자료구조가 갖는 장점과 한계를 잘 이해하고 상황에 맞게 올바른 자료 구조를 선택하고 사용하는 것이 중요

 - 자료구조는 언어별로 지원하는 양상이 다르다.

 - 각 언어가 가진 자료구조의 종류와 그것에 대한 사용 방법을 익히는 것이 중요하지만, 무엇보다 각 자료구조의 본질과 컨셉을 이해하고 상황에 맞는 적절한 자료 구조를 선택하는 것이 중요

 - 언어별로 지원하는 자료구조의 양상이 다르더라도 개념을 올바르게 이해한다면 해당 언어에 맞추어서 사용만 하면 됨.

 

 

###2. 왜 자료 구조가 중요한가?

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

 

* "코딩은 알고리즘과 자료구조, 이 두가지로 이루어진다"*

 * - 리누스 토르발스*

 

###3. 자료 구조의 분류

 - 단순 구조(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)

 

 

###4. 일반적으로 가장 자우 사용 되는 자료 구조

 - Array(List in Python)

 - Tuple

 - Set

 - Dictionary

 - Stack & Queue

 - Tree

 

#B. 자료구조 - Array(list)

 

###1. 정의

 - JavaScript에서는 Array, Python 에서는 List

 -  Array(List)는 가장 기초적이고 단순하면서도 가장 자주 사용 되는 자료 구조이다.

 

###2. Array의 특징

순차적으로 데이터를 저장하는 자료 구조

 - Array의 가장 큰 특징은 순차적(orderd)으로 데이터를 저장한다는 점이다.

 - 자료구조에 저장하는 데이터는 일반적으로 요소(element)라고 한다.

 - Array는 주로 서로 연결된 데이터들을 순차적으로 저장할 때 사용한다.

 - 순서가 상관 없더라도 서로 연결된 데이터들을 저장할 때 일반적으로 사용된다.

 

#####기타 특징

 - 삽입 순서대로 저장됨

 - 이미 생성된 리스트도 수정 가능(Mutable)

 - 동일한 값도 여러번 삽입 가능

 - 다중차원 배열(Multi-dimentional Array): Array의 요소가 Array가 될 수 있다.

 

###3. Array 내부 구조

Array는 순차적으로 데이터가 저장되기 때문에 순차적으로 번호를 지정할 수 있다. 

 

###4. 단점

######4-1. 요소 삭제 및 요소 추가 (Removing or Adding Elements)

중간의 요소가 삭제 될 때나 중간에 요소가 추가가 될 때 그 뒤의 모든 요소들이 한칸 밀리거나 한칸 당겨져야 한다. 그렇기 때문에 다른 자료 구조 보다 작업시간이 좀 더 걸릴 수 있다. 그래서 정보가 자주 삭제되거나 자주 추가되는 데이터를 담기에는 Array(List)가 적절치 않다.

 

 

#####4-2. Array 재조정(Array Resizing)

 - 배열은 메모리가 순차적으로 채워지기 때문에 배열이 처음 생성될 때 어느 정도 메모리를 미리 할당한다.(Pre-allocation)

 - 할당된 메모리 이상으로 저장할 때에 재조정이 일어난다. 이때 순서대로 다시 할당하기 때문에 시간이 늘어난다.

 - 사이즈 예측이 안되는 데이터를 다루기에 적절치 않은 자료구조이다.

 - 대부분의 언어에서 배열의 메모리 pre-allocation과 resizing을 자동으로 실행함.

 

###5. 언제 사용하면 좋을까

 - 순차열적인 데이터를 저장할 때

ex)주식 가격. 어제의 2만원가 오늘의 2만원이 다름>>값보다는 순서가 중요한 데이터

 - 다차원 데이터를 다룰 때 -> Multi-dimensional Array

 - 어떠한 특정 요소를 빠르게 읽어야 할 때

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

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

 

 

#C. Tuple

###1. 정의

 - List와 마찬가지로 데이터를 순차적으로 저장할 수 있는 순열 자료구조

 - 한 번 정의되고 나면 수정할 수 없음(immutable)

 - 2~3개 정도의 적은 수의 쇼규모 데이터를 저장할 때 많이 사용

 - 함수에서 리턴 값을 한 개 이상 리턴하고 싶을 때

 

 

###2. 장점

 - 간단한 값을 빨리 표현하고 싶을 때

 - 함수에서 리턴 값을 한 개 이상 리턴하고 싶을 때(ex. 좌표)

 - Array(List)보다 가볍고 메모리를 적게 사용함.

 

###3. 단점

 - 데이터가 무슨 의미인지 명확하지 않음

 - 문맥보고 의미를 가정해야 함

 - Named Tuple이 이런 단점을 극복하기 위해 있긴함(Python)

 

 

###4. 언제 사용하면 좋을까

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

 

반응형