이번주부터 시작해서 wecode에서 자료구조를 1주간 1번씩 배울 예정입니다.
이번 차수:
✔️ Data Structure의 개념 필요성, 그리고 다양한 종류의 자료구조에 대해 이해한다.
✔️ Array의 개념과 장점, 단점, 그리고 언제 사용하면 좋은지 이해한다.
✔️ Tuple의 개념과 장점, 단점, 그리고 언제 사용하면 좋은지 이해한다.
- 자료구조? 그게 뭔데 알아야 할까요?🤣
자료 구조란 데이터의 편리한 접근과 조작을 가능하게 하는 데이터를 저장하거나 조직하는 방법입니다.
쉽게 말해 저는 얼마전에 자취하기 위해서 자취방에서 사용해야 할 물건들을 담을 수 있는 무언가가 필요했습니다. 여러 종류의 가방 중 가장 적절한 가방은 무엇일까요? 네 바로 캐리어입니다.
이처럼, 그 상황에 맞게 적절하게 데이터를 담을 수 있는 적절한 구조라고 생각하시면 됩니다.
문맥과 데이터의 종류에 따라 적절한 자료 구조를 사용하는 것은 전체 개발 시스템에 큰 영향을 끼칩니다.
그렇기 때문에 자료구조의 다양한 종류와 각각의 장점과 한계를 잘 이해하고 상황에 맞게 올바른 자료 구조를 선택하고 사용하는 것이 중요합니다.
무엇보다!! 회사 면접시에 백엔드 지망생에게는 더욱더 필수적으로 느껴진다고 합니다.
이왕 배우는 거 제대로 짚고 넘어갈 수 있도록 학습하겠습니다.😁
1) 자료 구조의 분류
**inear Data Structure(선형 구조)
:저장되는 자료의 전후 관계가 1:1 (ex. List, Stacks, Queues)
선형구조는 데이터가 연속적으로 연결되어 있는 모양으로 구성하는 방법입니다.
출처: https://server-engineer.tistory.com/130 [HelloWorld]
** Non-Linear Data Structure(비선형 구조)
: 데이터 항목 사이의 관계가 1:n 또는 n:m (ex. Graphs, Trees )
반대로 비선형구조는 데이터가 그 특정한 자료구조에 따라 모양으로 연결되어 구성되어있는 방법입니다.
2) 일반적으로 가장 자주 사용 되는 자료 구조
- Array, 배열 그것은 무엇입니까? 🙄
배열은 제가 JavaScript를 잠깐 공부했을 때 썼습니다. 지금 파이썬을 쓰고있는 데 list와 기능적으로 거의 동일합니다. 메모리 효율면에서는 array가 유리합니다. 다만 list가 사용하기 훨씬 편리하다고 합니다.
1) Array 특징
array는 순차적(ordered)으로 데이터를 저장하는 자료 구조입니다.
2) Array 내부 구조
Array의 가장 큰 특징이 무엇이라고 했죠??????
바로 순차적으로 데이터를 저장하는 것입니다!!기억해야 해요★ 가장 중요한 특징입니다.
index는 0부터 시작하고, index는 -부호를 가질 수 있습니다. -1은 맨 마지막 요소부터 시작합니다.
왜 Array가 순차적으로 데이터를 저장해야 할 수 밖에 없을 까요?
실제 메모리 상에서! 물리적으로 데이터가 순차적으로 저장되기 때문입니다.
이렇게 데이터의 순서가 있기 때문에 우리는 인덱스에서 3가지를 더 알아야 합니다.
첫째, index가 존재합니다. ->index
둘째, index를 사용해 특정 요소를 array(list)로부터 읽어 들이는 것이 가능합니다. ->indexing
셋째, 요소의 특정 부분, 즉 n번째 index부터 m번째 index까지 따로 분리해 조작하는 것이 가능 ->slicing
그런데!! 항상 사람이든 사물이든 단점도 존재하기 마련입니다.
중간에 있는 데이터를 삭제하거나 , 중간에 데이터를 삽입해야할 경우 삭제한 이후부터의 요소를 앞으로 당겨야 할 것이고, 추가해야할 인덱스 자리부터 뒤로 옮겨야 합니다.
코드에서는 한줄 뿐인데, 어째서 실제 메모리상에서는 일이 많아지는 걸까요??ㅠㅠㅠㅠㅠ
그렇기 때문에 우리는 Array를 사용할 때는 정보가 자주 삭제되거나 추가되는 데이터를 담지 않는 것이 point입니다.
3) Array Resizing
resizing이란? 말그대로 사이즈를 다시 조정한다는 뜻입니다.
pre-allocation이라고 배열이 처음 생성될 떄 어느 정보 메모리를 미리 할당하는데 ,메모리를 pre-allocation 함으로써 새로 추가되는 요소들도 순차적으로 메몰에 저장될 수 있습니다.
하지만 요소들이 처음 할당한 메모리 이상으로 많아진다면 resizing이 필요합니다.
4)언제 사용하면 좋을까요?