일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- MAPF
- amazon ecs
- Go-lang
- 생성 패턴
- 디자인 패턴
- 지표
- 구조 패턴
- AWS
- Rust
- 오블완
- study
- AWS 비용 절감
- 14일 공부
- Playwright
- 신혼 여행
- 실용주의 프로그래머
- github
- 티스토리챌린지
- leetcode
- PostgreSQL
- terraform
- ssh
- 청첩장 모임
- 경로 계획 알고리즘
- Til
- Monthly Checklist
- docker
- 논문 정리
- DevOps
- 도커 주의사항
- Today
- Total
밤 늦게까지 여는 카페
[rust 공식 문서 14일 공부] 2일차 본문
1.3. Hello, Cargo - rust의 빌드 시스템이자 패키지 매니저인 "Cargo"
rust의 빌드 시스템이자 패키지 매니저인 cargo는 rust를 설치할 때 자동으로 설치됩니다.
cargo new
어제 직접 만들었던 프로젝트 폴더를 cargo를 이용해서 만들 수 있더라고요.
- cargo new 명령어를 이용해서 프로젝트 폴더 생성하기
- cargo new 명령어를 이용하면 프로젝트 폴더와 프로젝트에 필요한 기본적인 요소들을 생성해줍니다.
프로그래밍 언어 빌트인 도구에서 이렇게까지? 센스 있다...
cargo new 명령어를 이용해서 생성된 파일 중 Cargo.toml 파일은 프로젝트의 의존성을 관리할 때 사용됩니다.
cargo build, run check
cargo의 build, run, check 명령어는 상당히 유용합니다.
- check는 컴파일 되는지 빠르게 확인할 수 있음
- run이 자동으로 build 명령어를 실행해주는데 컴파일만 할 때는 build 명령어 사용하면 되겠더라고요.
- cargo build 명령어는 debug 모드를 기본적으로 실행합니다.,
- cargo build --release 명령어로 컴파일 할 경우 최적화가 이뤄지지만 컴파일 시간이 길어질 수 있습니다.
- target/build, target/release 디렉토리에 바이너리 파일이 생성됩니다.
프로젝트가 복잡해질수록 rustc를 이용하는 것보다 cargo를 이용하는 것이 관리성을 훨씬 많이 높여준다고 하니 cargo에 익숙해지는 것이 좋겠습니다!
2. guessing game - rust 프로그래밍 실습!
이제 실습 시간입니다!
cargo를 이용해서 프로젝트 디렉토리를 만들고 문서에서 알려주는 코드를 복사+붙여넣기 합니다!
복사+붙여넣기 한 코드는 사용자의 입력을 받아서 출력하는 프로그램이었습니다.
실습 세션을 따라서 완성한 코드는 다음과 같습니다.
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1..=100);
println!("The secret number is: {secret_number}");
loop {
println!("Please input your guess.");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line");
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Please type a number!!");
continue;
}
};
println!("You guessed: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
}
}
}
}
그리고 이 세션에서 제가 간단하게 경험해 본 rust 개념 및 기능들입니다.
아마 더 자세히 공부하게 되겠죠?
- mutability
- variable shadowing
- match를 이용한 에러 처리
- Result 타입
- 외부 라이브러리 import
- loop
3. Common Programming Concepts
이제 rust 언어의 기본적인 개념들이 나옵니다!
3.1. Variables and Mutability
rust에서 let으로 정의된 변수들은 기본적으로 immutable(변경 불가능)합니다.
하지만 변수를 변경할 수 있는 것은 프로그래밍에 큰 편의성을 주기 때문에 `mut` 라는 키워드를 추가하면 mutable 한 변수를 정의할 수 있습니다.
let immutable_variable = 1; // 값 변경 불가능
let mut mutable_variable = 100; // 값 변경 가능
Constant VS Variable
1. constant는 무조건 mutable 합니다.
2. constant는 어떤 scope에서도 선언될 수 있습니다.
3. constant는 `constant expression` 에 의해서만 선언될 수 있습니다.
Shadowing
Shadowing이란 **현재의 scope**에 정의되어 있는 변수를 새롭게 덮어 쓰는 행위입니다.
mutable 변수는 타입은 유지된 상태로 값만 변경할 수 있지만
shadowing의 경우에는 타입도 새롭게 정의할 수 있다는 점에서 편리합니다(?).
3.2. Data Types
- rust는 statically typed language기 때문에 compile 단계에서 모든 변수들의 타입을 알 수 있어야만 합니다.
Scalar Type
Scalar Type은 단일 값을 가지는 타입을 의미합니다.
rust에는 4개의 primary scalar type이 있습니다.
- Integer
- Floating-Point
- Booleans
- Character
Compound type
Compound Type은 여러 개의 값을 가지는 타입을 의미합니다.
rust에는 2개의 primary compound type이 있습니다.
- Tuple
- Array
3.3. Functions
함수 마지막에 `return` 키워드와 `;` 없이 expression만 적어두면 return 문이 됩니다.
그 외에는 평범했습니다.
Comments
평범한 주석이었는데 놀랍게도 /* */과 같은 multi line용 주석이 없었습니다.
3.4. Control Flow
조건문 있을 거 다 있고,
- if, else if, else
- if 에는 무조건 boolean
변수 선언할 때 if 사용할 수 있고,
- 가독성 떨어지는 삼항 연산자 대신에 if 문 사용할 수 있습니다!
- 예시) let number = if condition { 5 } else { 6 };
while 문과 동일한 loop가 있고, nested loop에서 분기 조절을 위한 loop labeling 있습니다.
흥미로웠던 것은 변수 선언할 때 loop를 사용할 수 있더라고요?
- 있었으면 하는 기능들이 다 있네요...?
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
2일차인데 rust가 개발자 편의성을 상당히 많이 고려한 언어라는게 느껴지네요...
여기서 조금 더 공부할까 했는데 토리가 공부 그만하고 자라고 해서 이만 자러 가겠습니다 ㅎㅎ...
'For Fun' 카테고리의 다른 글
[rust 공식 문서 14일 공부] 4일차 (2) | 2024.12.10 |
---|---|
[rust 공식 문서 14일 공부] 3일차 (0) | 2024.12.08 |
[rust 공식 문서 14일 공부] 1일차 (0) | 2024.12.06 |
Why Most Data Projects Fail and How to Avoid It(Jesse Anderson) YOW! 2022 영상 간단 리뷰 - 대다수의 데이터 프로젝트들이 실패하는 이유가 뭘까요? (0) | 2023.10.05 |
GCP 서비스 프리 티어 정리 - 구글은 AWS보다 통이 클까? (0) | 2022.11.04 |