Easy Rust Korean 001 ~ 010

Natreeum's Blog·2025년 10월 26일

Easy Rust Korean Study

목록 보기
1/5

001

웹 IDE (rust전용)

https://play.rust-lang.org

  • permalink to the playground : 코드를 포함한 ide 링크 복사가능

Rust 의 장단점

장점

  • c, c++ 처럼 빠른속도

단점

  • 어려움

002

comments (주석)

가장 기본적인 주석

// This is normal comment

Documentation 주석

/// This is normal comment

부분적인 주석

fn main() {
	let x/*: i16*/ = 10;
}
  • 사용하지 않은 변수에 대해 언더스코어(_) 로 이름을 시작하게 되면 미사용변수에 대한 Warning 이 없음

003

Primitive types : 기본 데이터 타입

integer (정수, 음수 가능)

  • i8, i16, i32, i64, i128, and isize

unsigned integer (부호없는 정수, 음수 불가능)

  • u8, u16, u32, u64, u128, and usize

(i -> integer || u -> unsigned) + bit 수 로 표현

let my_number = 100; 

변수 선언 시 let 사용

my_number 는 어떤 타입인지 알 수 없음

-> u8타입을 지정하고 싶다면 다음과 같이 지정 가능

let my_number: u8 = 100; 

type inference

다음과 같은 코드에서는 컴파일러가 타입을 추론하여 계산함

let my_number: u8 = 100; 
let my_other_number = 50; // type 미지정, 기본 : i32(or i64)
let _third_number = my_number + my_other_number;

u8 + i64 연산은 기본적으로 안되지만, my_other_number 에 대해 타입지정을 안했기 때문에 컴파일러가 타입을 추론하여 연산할 수 있음.

다음과 같이 각 변수에 대해 타입이 지정돼있는 변수사이의 연산은 불가능

let my_number: u8 = 100; 
let my_other_number: u16 = 50; // u16 지정
let _third_number = my_number + my_other_number;

>> ERROR

004

Char

println!(String); 의 형태에서는 무조건 큰 따옴표 ("")를 사용하고, Char type 변수를 선언할 때에는 작은 따옴표 ('')를 사용

String : 문자열
Char : 문자

char type은 4bytes 크기

println!("Hello, world!");
let first_letter = 'A';
let space = ' ';

Casting

simple type change using 'as'

let my_number: u16 = 8;
let second_number: u8 = 10;
let third_number = my_number + second_number as u16;

Char -> u8 으로 캐스팅 하면 ASCII Code 가 됨

let my_number = 'a' as u8;
println!("Hello, world! My number is {}", my_number);

005

Char 와 String의 차이

Char type 의 크기는 4bytes

println!("Size of a char: {}", std::mem::size_of::<char>()); // 4bytes

Sring ("")타입의 크기는 .len()으로 알 수 있음

println!("Size of string containing 'a': {}", "a".len()); // 1 출력 = 1byte

글자수와 비슷하지만, 사실 글자수가 아닌 bytes 수

println!("Size of string containing 'ß': {}", "ß".len()); // 독일어 : 2bytes
println!("Size of string containing '国': {}", "国".len()); // 한자 : 3bytes
println!("Size of string containing '𓅱': {}", "𓅱".len()); // 고대 이집트어 : 4bytes

string의 bytes수가 아닌 글자수를 알려면?

.chars().count() 사용

let slice = "Hello!";
println!("Slice is {} bytes and also {} characters.", slice.len(), slice.chars().count());

// .chars() : "Hello!" -> 'H', 'e', 'l', ... , '!';

006

숫자형 (u8, u16, ...) 앞에 숫자를 넣어서 변수선언과 타입지정을 한번에 할 수 있음

// 중간에 underscore(_)는 아무리 많이 써도 상관없음
let my_number = 9_u8; // u8 타입의 9값을 가진 변수
let second_number = 1_000_000_000u64; 
let third_number = 9_____________1u32; 

Float

  1. let float_number = 9.;
  2. f32 / f64 로 타입지정(주로 f64사용)
let f_number = 9.; // f64
let s_number: f64 = 1.1;
let t_number = 8; // i32
println!("{}", f_number + s_number + t_number as f64); // 18.1

007

println!()

-> println meand print line
-> ! means macro

매크로는 super function.

변수 사용({})기호를 사용하고 변수할당을 하지 않으면 에러 발생

let my_name = "David";
println!("My name is {}");

>> ERROR

function

fn func_name() -> return_type {
}

형식으로 함수 선언 가능

fn give_age() -> i32 {
	42 // return 42 라고 하지 않아도 됨!
}

fn main(){
	let my_name = "David";
	println!("My name is {} and my age is {}", my_name, give_age());
}

008

println!() - 2

{} 안에 변수명을 넣어서 사용 가능!

fn main(){
	let my_city = "Seoul";
	let year = 2002;
	let population = 9_987_987;
	println!("The city of {city} in {year} had a population of {population}",
    city = my_city,
    year = year,
    population = population);
}

{} 안에 변수 인덱스를 넣어서 사용 가능!

fn main(){
	let my_city = "Seoul";
	let year = 2002;
	let population = 9_987_987;
	println!("The city of {0} in {1} had a population of {2}. I love {0}",
    my_city,
    year,
    population);
}

string interpolation

fn main(){
	let city = "Seoul";
	let year = 2002;
	let population = 9_987_987;
	println!("The city of {city} in {year} had a population of {population}. I love {city}");
}

다음과 같이 expression(표현식)은 사용 불가능

fn main(){
	let city = "Seoul";
	let year = 2002;
	let population = 9_987_987;
	println!("The city of {city} in {year+2} had a population of {population}. I love {city}");
}

>> year+2 에서 Error

009

empty tuple

// 8을 반환하는 함수 number()
fn number() -> i32 {
	8
}

하지만 8 뒤에 세미콜론을 붙이게 된다면 에러 발생

// 8을 반환하는 함수 number()
fn number() -> i32 {
	8;
}

fn main() {
	let my_number = number();
}

/*
>> Error : expected i32 but found ()
() 는 Rust 에서 empty tuple, unit type 이라고 부르고 다른 언어에서는 void 라고 부름
*/

Display, Debug

  • Display : {}
  • Debug Print : {:?}
fn empty_tuple() {
}

fn main() {
	let tuple = empty_tuple();
    println!("{}", tuple); // error
    println!("{:?}", tuple); // 웬만해서는 출력 가능!
}

010

function

앞서 알아본 간단한 함수의 모양은 다음과 같음

fn give_number() -> i32 {
	8
}

fn main() {
	let my_number = give_number();
}

Parameter 를 받아서 반환하는 형태의 함수는 다음과 같음

fn give_number(one: i32, two: i32) -> i32 {
	one * two
}

fn main() {
	let my_number = give_number(9,8);
    println!("{}", my_number);
}

Code block 활용

fn give_number(one: i16, two: i16) -> i16 {
	let multiplied_by_ten = {
    	let f_number = 10;
        f_number * one * two
    };
    multiplied_by_ten
}

fn main() {
	let my_number = give_number(9,8);
    println!("{}", my_number);
}

강의 링크
https://youtube.com/playlist?list=PLfllocyHVgsSJf1zO6k6o3SX2mbZjAqYE&si=LfVF7DHgzWT7iUrp

profile
BlockChain DEV

0개의 댓글