Rust의 구체적인 내용을 배우기 전에 몸풀기로 간단한 숫자 맞추기 게임을 만들어보고 시작하겠습니다.
이 게임은 콘솔로 숫자를 입력받고 입력받은 숫자가 맞춰야 될 숫자에 비해서 큰지 작은지를 알려줍니다.
맞춰야 할 숫자의 범위는 1~100 사이의 정수입니다.
횟수 제한이 없으면 재미 없으니까 7번의 제한을 두겠습니다!
새로운 프로젝트 만들기
프로젝트 디렉토리로 가서 터미널에 다음 명령어를 입력합니다.
cargo new guessing_game
생성된 guessing_game디렉토리를 vscode로 엽니다.
src/main.rs를 확인해보면 "Hello World"를 출력하는 프로그램이 있습니다.
fn main() {
println!("Hello, world!");
}
(tistory 코드작성기에 Rust가 없네요... C++로 설정하고 작성합니다. 2022.09.30.)
이제 터미널에 cargo run을 입력하여 컴파일하고 실행해봅니다.
준비가 완료 되었으니 다음으로 넘어갑니다.
사용자로부터 숫자 입력받기
src/main.rs에 다음 코드를 작성해주세요.
use std::io;
fn main() {
println!("==== 숫자 맞추기 게임! ====");
println!("숫자를 입력해주세요.");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("입력받지 못했습니다.");
println!("당신의 예측: {}", guess);
}
첫 번째 줄 부터 살펴보겠습니다.
use std::io
C언어의 #include<stdio.h> 와 같이 use std::io는 인풋 아웃풋과 관련된 기능을 제공합니다.
변수 선언
다음 코드는 사용자의 입력값을 저장할 수 있는 변수를 생성합니다.
let mut guess = String::new();
let 키워드는 변수를 선언합니다. 그 뒤에 있는 mut은 guess를 변경 가능한 변수로 만듭니다.
만약 let guess로 변수를 선언한다면 guess를 수정할 수 없게 됩니다.
let x = 5; // 변경 불가능
let mut y = 5; // 변경 가능
코드를 다시 보면 guess 변수는 String::new()의 결과값인 새로운 String 인스턴스가 bind됩니다.
::new에 있는 ::는 new가 String 타입의 associated function(연관 함수) 임을 알려줍니다.
여기서 new는 비어있는 새로운 문자열을 만들어줍니다.
한줄로 말하면 이 코드는 빈 문자열을 가지고있는 String 인스턴스를 만들어서 변경 가능한 guess 변수에 할당하는것입니다.
표준 입력
다음으로 이 코드를 봅시다.
io::stdin()
.read_line(&mut guess)
.expect("입력받지 못했습니다.");
한 줄씩 살펴보죠
io::stdin()
맨 첫 줄에 use std::io; 를 작성한게 기억나시나요? 여기서 우리는 io모듈을 불러왔습니다. io::stdin()은 io모듈로부터 stdin 함수를 호출한 것입니다. 만약 io모듈을 import 하지 않았다면 std::io::stdin을 호출해야됩니다.
stdin 함수는 std::io::Stdin의 인스턴스를 리턴합니다.
다음 줄을 살펴보죠
.read_line(&mut guess)
read_line 메서드는 사용자로부터 입력을 받습니다. 인자로 &mut guess를 주었는데 &은 참조자입니다. 그리고 참조자는 기본적으로 불변이기 때문에 &guess가 아니라 &mut guess로 작성해서 변경 가능한 참조자로 바꿔서 인자로 넣어야 합니다.
다음 줄은 다음과 같습니다.
.expect("입력받지 못했습니다.");
만약 입력을 받는 과정에서 에러가 발생한다면 "입력받지 못했습니다."가 출력됩니다. read_line에서는 Ok와 Err 두 개의 반환이 나옵니다. expect는 에러가 발생했을 경우에 실행되는 메서드입니다.
변수 출력
이제 마지막줄을 봅시다.
println!("당신의 예측: {}", guess);
여기서 guess의 값이 {}위치에 들어가서 출력이 됩니다.
만약 변수 여러개를 출력하려면 {}를 변수 개수 만큼 작성하고 println!의 인자로 순서대로 작성합니다.
let x = 5;
let y = 10;
println!("x = {} and y = {}", x, y); // "x = 5 and y = 10"가 출력됩니다.
이제 지금까지 작성한 코드를 실행시켜보죠.
잘 작동합니다! 이제 다음으로 우리가 맞춰야 할 랜덤 정수를 만들어봅시다.
다음글에 이어서 진행하겠습니다.
2022.10.05 - [Rust] - [2 - 2] Rust 간단한 숫자 맞추기 게임
[2 - 2] Rust 간단한 숫자 맞추기 게임
지난글에 이어서 랜덤 정수를 만들어보겠습니다. 랜덤 정수 생성하기 Rust 크레이트(Crate)를 사용하여 외부 라이브러리 가져오기 Rust 크레이트(Crate)를 사용하여 외부 라이브러리 가져오기 러스트
supern0va.tistory.com
'Rust' 카테고리의 다른 글
Rust 변수의 가변성(mutable)과 상수(const) (1) | 2022.10.07 |
---|---|
[2 - 2] Rust 간단한 숫자 맞추기 게임 (1) | 2022.10.05 |
Rust 크레이트(Crate)를 사용하여 외부 라이브러리 가져오기 (0) | 2022.10.04 |
[1] Rust (러스트) Getting Started! (0) | 2022.09.29 |
Rust 공부해보기 (1) | 2022.09.29 |