Rust 6

(Rust) 참조와 역참조 정리 (*, &)

(Rust) 참조와 역참조 정리 (*, &)&는 참조를 만들고 *는 참조가 가리키는 place expression에 접근하며, 실제 copy, move, borrowing은 그 표현식을 사용하는 문맥에서 결정.목차&와 *&self*와 소유권 move 구분하기Box 구현참조를 직접 매칭하는 match ergonomics참조와 포인터 종류 비교표현을 선택하는 기준&와 *다음 코드에서 reference는 number를 공유 참조로 빌림.let number = 5;let reference = &number;assert_eq!(*reference, 5);&number의 타입은 &i32. *reference는 참조가 가리키는 i32 위치에 접근하는 역참조 표현식.참고로 우리가 C언어 배울때 포인터처럼 생각하면 이해..

Rust 2026.09.09

(Rust) 에러 전파 연산자 정리

(Rust) 에러 전파 연산자 정리Rust의 ?는 성공 값은 꺼내고 실패 값은 현재 함수의 반환값으로 바꾸어 호출자에게 전달하는 연산자. write!와 ?의 흐름 차이write!(formatter, ", ")?; write!의 반환 타입은 출력 대상의 write_fmt가 정함. 위 코드처럼 fmt::Formatter에 쓰면 fmt::Result, std::io::Write 구현에 쓰면 보통 io::Result를 반환함.Ok(())이면 다음 코드로 진행함Err(error)이면 현재 함수를 끝내고 에러를 호출자에게 반환함 match로 작성해보기Result에 사용한 ?는 단순화하면 아래 흐름으로 볼 수 있음.match write!(formatter, ", ") { Ok(()) => {} Err(er..

Rust 2026.09.09

(Rust) use와 match 정리

(Rust) use와 match 정리 Rust 예제에서 use와 match는 함께 자주 나오지만 사용하는 역할이 다름.use는 경로에 있는 이름을 현재 범위로 가져오고, match는 값과 패턴을 대조해 실행할 코드를 고름.목차usecrate::`*` 표현식matchuse로 match arm 간결하기 표현하는 방법이름 충돌과 전체 경로use다음 열거형의 두 변형은 Status::Poor, Status::Rich라는 경로를 가짐.enum Status { Poor, Rich,}let status = Status::Poor; use로 두 변형을 현재 범위에 가져오면 짧은 이름을 쓸 수 있음. enum Status { Poor, Rich,}use Status::{ Poor, Rich };le..

Rust 2026.09.09

(Rust) Display와 Debug 출력 형식 비교

(Rust) Display와 Debug 출력 형식 비교 Rust의 println!에서 {}와 {:?}는 같은 값을 서로 다른 목적으로 출력하는데 사용println!("{value}"); // Displayprintln!("{value:?}"); // Debug {}는 Display{:?}는 Debugtrait 구현을 사용하고 간단하게 출력하는 형태에 차이가 존재함. 서로 다른 역할과 구현 방식Display는 사용자에게 노출할 출력 형식을 정의.구조체의 필드 이름을 그대로 보여 주기보다 타입을 대표하는 문자열을 직접 정하는 방식.사용자 정의 타입은 Display를 자동으로 파생할 수 없어서, fmt 메서드 안에서 `write!`로 출력 형식을 구현해야 함.Display를 구현하면 {}뿐 아니라 to_s..

Rust 2026.09.08

(Rust) Copy와 Clone 차이점 정리

(Rust) Copy와 Clone 차이점 정리Rust의 소유권과 관련하여 Copy와 Clone의 차이점 정리 // 컴파일 Olet x = 5;let y = x;println!("{x}, {y}");// 컴파일 Xlet s1 = String::from("hello");let s2 = s1;println!("{s1}"); 둘 다 값을 다른 변수에 대입했을 뿐인데, 왜 하나는 되고 하나는 안 되는지 이 차이를 설명하는 개념이 Copy와 Clone 목차요약i32는 왜 대입 후에도 사용할 수 있을까?String은 왜 move될까?Copy란?Clone이란?헷갈리는 부분 정리구조체에서 Copy와 Clone 사용하기Copy를 붙일지 판단하는 기준정리 요약구분CopyClone호출 방식암묵적명시적사용 형태let y = x..

Rust 2026.07.04

(Rust) 소유권 (Ownership) 이해하기

(Rust) 소유권 (Ownership) 이해하기Rust에서 소유권은 단순한 문법이 아니라 메모리를 관리하는 기본 규칙. Rust는 GC가 메모리를 정리하는 방식도 아니고, 개발자가 직접 free를 호출하는 방식도 아님. 대신 컴파일 시점에 값의 owner, scope, 참조 관계를 검사해서 메모리 안전성을 보장. 목차Rust가 메모리를 관리하는 방식소유권 규칙Stack과 HeapMove, Clone, Copy함수 호출과 소유권 이동참조와 빌림Mutable reference 규칙Dangling reference를 막는 방식Slice 타입 Rust가 소유권을 사용하는 이유프로그램은 실행 중에 메모리를 사용함.문제는 사용이 끝난 메모리를 언제 정리할지임. 언어마다 이 문제를 푸는 방식이 다름.GC가 있는 언..

Rust 2026.07.04