[rust 공식 문서 14일 공부] 7일차
8.1. Storing Lists of Values with Vectors
첫번째로 알아볼 collection 타입은 vector입니다.
혹시 c++에서 vector를 보셨다면 그 녀석과 굉장히 유사하더라고요.
vector 변수를 정의하고, push 메소드로 원소를 추가합니다. 그리고 get 메소드 혹은 [] accessor로 원소에 접근할 수 있습니다.
하지만 여기서 끝나면 rust가 아닙니다.
get 메소드는 존재하지 않는 index에 접근하려고 할 때 발생하는 패닉을 막기 위해서 Option enum을 반환합니다.
또한 enum을 이용해서 vector에 여러 타입을 저장하는 것도 가능합니다.
- enum에 데이터를 저장할 수 있는 것의 유용한 활용 방법이 있었군요!
- enum이 타입의 namespace역할을 해주는 것 같기도 하네요
8.2. Storing UTF-8 Encoded Text with Strings
collection 얘기하다가 갑자기 String이 나와서 어리둥절 하셨을 수도 있습니다.
하지만 rust에서는 String을 byte의 collection으로 구현했기 때문에 이 챕터에 있는 것이더라고요.
vector 때와 똑같이 String의 생성, 수정, 읽기에 대해서 알아보겠습니다.
사실 String 타입은 바이트 타입의 vector기 때문에 메소드들이 비슷합니다.
낯설어 할 수 있는 것은 단일 숫자로 인덱싱하는 것은 불가능합니다!
- 왜 불가능할까요? rust의 String은 UTF-8 인코딩 되어 있어서 바로 문자열로 치환할 수 없기 때문입니다.
이외에도 chars, bytes로 String의 각 문자들을 조회할 수 있습니다.
8.3. Storing Keys with Associated Values in Hash Maps
다음으로 많이 사용되는 collection은 hash map이죠!
- get, set 모두 O(1)의 시간복잡도를 가지고 있는 hash map의 활용도는 높을 수밖에 없죠.
hash map도 create, update, read를 알아보겠습니다.
hash map의 insert는 기본적으로 값을 덮어쓰게 됩니다.
만약 키가 없을 때만 값을 갱신하고 싶다면 11번째 줄의 entry API와 or_insert 메소드를 이용하면 됩니다.
주말에 푹 쉬었네요ㅎㅎ 연말 남은 기간도 화이팅입니다!