본문 바로가기
Programming/Rust

[Rust] 기초문법 익히기1

by eyi-jin 2022. 4. 20.

강의 1~10

0. 배경지식

빠르고, 안전한 언어

C와 C++ 만큼 빠릅니다. Java 만큼 안전합니다.

두가지 장점을 모두 갖춘 언어입니다.

형식이 엄격한 언어

안전한 코딩을 위해 Rust에서 정해놓은 형식을 엄격하게 지켜야 합니다. 그래서 비교적 코딩의 자유도가 떨어집니다.

코딩을 알려주는 친절한 컴파일러

오류가 나면 어떻게 수정해야하는지 해결방법을 컴파일러에서 알려줍니다.


1. 주석(Comments)

💡
주석은 컴파일러가 볼 수 없는 부분입니다. 주로 코드 해석을 적을 때 사용합니다.

// 일반 주석

이것이 기본적인 코멘트 기호입니다.

/// 문서화(documentation )

문서화할 때 사용하는 코멘트 기호입니다.

/* */ 일부분 주석

일부분만 코멘트로 취급하기 위해서 사용하는 코멘트 기호입니다.


 

2. 변수

Rust에서 변수를 바인딩이라고 부르는 경우가 많다.

let 예약어

let 예약어를 사용하여 변수를 선언합니다.

let my_number = 100;

미사용 변수 경고(warning)

변수를 선언하고 사용하지 않으면 warning이 나타납니다.

_ 로 시작하는 변수명

_(underscore)로 시작하는 변수명을 사용하면 컴파일러에서의 변수 미사용 warning을 없앨 수 있습니다.

let _my_number = 100;
// 해당 변수를 사용하지 않아도 경고가 뜨지 않습니다.

한글 변수명

한글로 된 변수명을 지원합니다.

변수 출력

{}를 통해 해당 위치에 변수를 출력할 수 있습니다.

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

 

3. 기본 타입(primitive type)

3-1. int 타입

int 타입 종류

  • int : i8, i16, i32, i64, i128, isize
  • unsigned int : u8, u16, u32, u64, u128, usize
    • isize와 usize는 컴퓨터 구조에 따릅니다. 32비트 컴퓨터 → isze = i32, 64비트 컴퓨터 → isize = i64
    • i,u뒤에 숫자는 bits 단위입니다. i8 = 1 byte i64 = 8 bytes u8 = 255 u16 = 65535

기본 타입

타입 선언이 없는 변수는 기본적으로 i32 타입을 사용합니다.

변수 타입 선언1

let my_number : u8 = 100;

i32 말고 다른 타입을 사용하고 싶을 때 위와 같이 선언합니다.

변수 타입 선언2

숫자 사이에 _를 넣어도 컴파일러가 무시합니다.

let my_number =9u8;
let my_number2 =9_u8;
let my_number3 =9_________u8;
let other number = 10_000_000_000u64; 

타입 추론(type inference)

컴파일러에서 타입 추론을 해줍니다.

let my_number : u8 = 100;
let my_other_number = 50;
let third_number = my_number + my_other_number;
// third number 의 타입은 u8이 됩니다.

as를 통한 단순한 타입 변환 (casting)

let my_number : u16 = 100;
let second_number : u8 = 50;
let third_number = my_number + second_number as u16;

 

3-2. char 타입

‘c’har는 작은따옴표

작은따옴료로 문자 하나를 묶어서 character를 사용합니다.

let first_letter = 'A';

모든 것을 표기하는 char

let space = ' ';
let other_language_char = 'Ω';
let smile_emoji ='😀';

char는 숫자

모든 char는 숫자입니다. 예를 들어 A는 65이며, 友는 2145입니다. 숫자들의 리스트를 Unicode라고 부릅니다.

char 타입 크기

4bytes

String과의 관계

C나 C++처럼 char를 연결해서 string만들 수 없습니다.

chars() 함수

String을 char로 만들어줍니다.

let slice = "Hello!";
println!("Slice is {} characters.",slice.chars().count());
// "Hello" -> ('H', 'e', 'l', 'l', 'o')

3-3. String 타입

“String”은 큰따옴표

큰따옴표로 묶어서 String을 사용합니다.

println!("Hello, world!");

3-4. Float 타입

종류

  • f32, f64

보통 f64를 사용합니다.

 

4. 응용 단위 타입(Unit type)

5. 길이 출력 함수

.len()

let slice = "Hello!";
println!("slice is {} bytes.", slice.len());
//slice is 6 bytes.

 

6. println!()

변수 출력 방식1

괄호안에 변수명을 넣으면 됩니다.

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}")
}

변수 출력 방식 2

괄호를 비워놓고, ,(콤마)를 이용해서 {}안에서 변수를 출력할 수 있습니다.

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

7. Semicolon

세미콜론은 유의하여 사용해야 합니다.

fn number() -> i32{
	8;
}
fn main(){
	let _my_number = number();
}

⚠️ 코드1 :위의 코드는 오류가 납니다!

 

fn number() -> i32{
	8
}
fn main(){
	let _my_number = number();
}

코드2는 오류가 나지 않습니다.

차이점

() empty tuple 때문입니다.

참고로 Rust에서의 empty tuple은 다른 언어에서의 void와 유사합니다.

Rust에서 Semicolon 으로 끝나면 그것은 empty tuple을 의미합니다.

fn number() -> (){
	8;
}
fn main(){
	let _my_number = number();
}

Display {}, Debug print {:?}

변수를 출력할 때는 {}를, 타입과 속성을 그대로 출력하기위해 {:?}를 사용합니다.

함수

  • 매개변수는 타입을 명시해줘야 합니다.
  • 리턴 타입 선언은 ‘-> i32’ 와 같이 나타냅니다.
  • 리턴 값은 맨 마지막 statement입니다.
    • empty tuple을 return하려면 세미콜론을 붙입니다.
    • 값을 return 하려면 세미콜론을 붙이지 않습니다.
fn give_number(one: i32, two: i32) -> i32{
	one * two
	// i32값을 return하기 위해서 ; 붙이지 않습니다.
}
fn main() {
	let my_number = give_number(9,8)
	println!("{}", my_number);
}
  • 범위 지정 규칙 : {}를 이용하여 내용을 묶어서 표현이 가능합니다.
fn give_number(one: i16, two: i16) -> i16{
	let multiplied _by_ten = {//묶어ㅓㅅ 표현
		let first_number =10;
		first_number * one  * two
	};
	multiplied_by_ten
}
fn main() {
	let my_number = give_number(9,1);
	println!("{my_number}");
}

 

댓글