오후에 또 세션이 있네.
데이터 구조란 무엇인지, 왜 중요한지, 그리고 데이터 구조의 종류 중 첫 번째로 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)를 쓰기에는 간단한 데이터들을 표현할 때 사용
'Wecode > Session' 카테고리의 다른 글
Session - HTTP 구조 및 핵심 요소 (0) | 2020.05.13 |
---|---|
Session-Web 크롤링 (0) | 2020.05.12 |
Session-Foundations kick off (0) | 2020.05.11 |
Session- 웹은 어떻게 작동하는가?(How does the web work?) (0) | 2020.05.06 |
Session-웹서비스에 대해서(about Web Service) (0) | 2020.05.05 |