brickstudy / rust-basic

rust 기본 연습
0 stars 0 forks source link

[Keyword] 2주차 - 3~4장 #6

Open leejaeseung opened 2 days ago

leejaeseung commented 2 days ago

이번 주차에 읽은 내용에서 중요하다고 생각되는 keyword 를 공유합니다.

leejaeseung commented 2 days ago

3장

Rust-analyzer [User Manual](https://rust-analyzer.github.io/manual.html)

tmod : 테스트 모듈 자동 완성

tfn : 테스트 함수 자동 완성

nightly 란?

러스트의 배포는 nigthly, beta, stable 로 관리된다.

nightly : 최신 기능이 있는 버전. 아직 beta 로 가기 전이므로 불안정할 수 있다.

beta : stable 로 가기 전에 테스트를 거치는 단계.

stable : 정식 배포 버전. stable 은 6주마다 배포된다.

[G - 러스트가 만들어지는 과정과 ‘Nightly 러스트’ - The Rust Programming Language](https://doc.rust-kr.org/appendix-07-nightly-rust.html)

rustfmt

clippy

cargo-update

cargo-expand

cargo-fuzz

cargo-watch

cargo-tree

4장

핵심 데이터 구조 : 문자열(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 타입으로 반환한다.