Open leejaeseung opened 2 days ago
Rust-analyzer [User Manual](https://rust-analyzer.github.io/manual.html)
tmod : 테스트 모듈 자동 완성
tfn : 테스트 함수 자동 완성
nightly 란?
러스트의 배포는 nigthly, beta, stable 로 관리된다.
nightly : 최신 기능이 있는 버전. 아직 beta 로 가기 전이므로 불안정할 수 있다.
beta : stable 로 가기 전에 테스트를 거치는 단계.
stable : 정식 배포 버전. stable 은 6주마다 배포된다.
rustfmt
clippy
cargo-update
cargo-expand
cargo-fuzz
cargo-watch
cargo-tree
핵심 데이터 구조 : 문자열(string), 벡터(vector), 맵(map)
String : 힙에 할당. 대여와 변경이 가능 str : 스택에 할당. 대여할 수 있지만 이동/변경이 불가
“러스트는 타입 자체가 메모리 할당 방법을 정의한다.”
정적 문자열이 필요하다면 → &str 가변 문자열이 필요하다면 → String
배열 : 고정 길이의 값 시퀀스. 컴파일 시 길이 결정 슬라이스 : 임의 길이의 값 시퀀스. 실행 시 길이 결정(가변)
슬라이스는 스택에 저장된다. 가변 길이인데 어떻게? 벡터와는 뭐가 다른거지?
벡터(Vector) 벡터(Vec)는 슬라이스의 메서드를 상속한다. Vec 은 Vec 인 동시에 슬라이스인 타입이다.
HashMap
크기 타입(usize, isize)을 사용하는 이유는 뭘까?
대부분의 경우 구조체 요소를 공개할 필요가 없다.
자바, C++ 로 치면 클래스 필드를 모두 private 으로 한다는 건데, 외부에서 접근할 수 있어야 하지 않을까? → pub 을 붙이지 않으면 선언한 모듈 내부에선 접근이 가능하다. 즉, 구조체의 구현부에서 접근이 가능하므로, 구현 메서드를 통해 외부에서 접근하기를 바라는 것 같다.
열거형 값으로 구조체, 튜플 등 타입을 넣을 수도 있다.
enum EnumType {
NamedType,
String,
NamedString(String),
StructLike { name: String },
TupleLike(String, i32),
}
어떻게 쓰일 수 있을까? → Result 도 enum 타입으로 되어있다.
pub enum Result<T, E> {
Ok(T),
Err(E)
}
Result 의 Err 는 단지 제네릭 타입일 뿐이다. 이름만 Err 일 뿐 다른 언어의 Throwable 이나 Exception 과는 관련이 없다. 그저 사용자가 정의한 오류 타입이다.
From, Into 트레이트 위 트레이트를 구현한 타입에 대해 암묵적인 변환을 가능하게 해준다.
TryFrom, TryInto From, Into 와 유사하지만, 타입 변환 과정 중에 발생한 에러를 Result 타입으로 반환한다.
이번 주차에 읽은 내용에서 중요하다고 생각되는 keyword 를 공유합니다.