본문 바로가기
프로그래밍/Rust

Rust 예제 정리

by 만디기 2024. 3. 6.

회사에서 Rust 프로그래밍 강의를 들으면서 공부한 예제를 정리해 본다.

내가 원래 아는 언어들이랑 개념이 많이 달라서 어려웠다...

 

- 참조 링크

1) 코드누리 Rust

 

GitHub - codenuri/RUST

Contribute to codenuri/RUST development by creating an account on GitHub.

github.com

 

2) Rust 가이드 홈페이지

 

들어가기에 앞서 - The Rust Programming Language

이 문서는 2판 번역본입니다. 최신 2021 에디션 문서는 https://doc.rust-kr.org 에서 확인하실 수 있습니다. 항상 그렇게 명확지는 않았지만, 러스트 프로그래밍 언어는 근본적으로 권한 분산에 관한 것

rinthel.github.io

 

- 기본 출력

더보기
fn main() {
	println!("Hello World!");
}

 

- 정수 3개 입/출력 예제

더보기
fn main() {
	println!("3개의 정수를 입력해 주세요.");

	let mut s = String::new();
	std::io::stdin().read_line(&mut s).unwrap();
	let vs: Vec<&str> = s.trim().split(" ").collect();

	let a = vs[0].parse::<i32>().unwrap();
	let b = vs[1].parse::<i32>().unwrap();
	let c = vs[2].parse::<i32>().unwrap();
	
	println!("{} {} {}", a, b, c)
}

 

- Vector에서 홀수의 합 구하기(iterator adapter(filter) 사용)

더보기
fn main() {
	let v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    let mut iter = v.iter().filter(|&x| x % 2 != 0);
	let mut result: i32 = 0;
    
    for val in iter {
	result += val;
	}
	
	println!("결과 값 : {}", result);
}

 

- 문자 값 비교하는 함수 만들기

더보기
fn main() {
	let s1 = "A".to_string();
	let s2 = "D".to_string();
	let s3 = "X".to_string();
	
	fn min(s1: &str, s2: &str, s3: &str) -> String {
		return if s1 < s2 { if s1 < s3 { (*s1).to_string() } else { (*s3).to_string() } } 
		else { if s2 < s3 { (*s2).to_string() } else { (*s3).to_string() } };
	}
	
	let r = min(&s1, &s2, &s3);
	println!("{}", r); // "A"
}

 

- Circle 구조체 만들기(구조체, Display Trait, 생성자(연관 함수))

더보기
fn main() {
	// 1. Circle struct 만들기
	struct Circle {
		x: f32,
		y: f32,
		radius: f32
	}
	
	impl Circle {
    	// 생성자(연관 함수) - 메서드 인자에 self가 들어가지 않음
		fn new(x: f32, y: f32, radius: f32) -> Self 
		{
			let rc = Circle{x, y, radius};
			rc
		}
		
        fn area(&self) -> f32 {
            self.radius.powf(2.0)
        }
		
        fn inflate(&mut self, inflateR: f32) -> () {
            self.radius += inflateR;
        }
	}
	
        // Display Trait로 출력 형식 조정
	impl std::fmt::Display for Circle 
	{
		fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result 
		{
			write!(f, "{:.1}, {:.1}, {:.1}", self.x, self.y, self.radius)
		}
	}
	
	let mut c1 = Circle {x: 3.0, y: 3.0, radius: 8.0};
	
	// 2. new associated function
	let mut c2 = Circle::new(3.0, 3.0, 5.0);
	
	// 3. area() 메소드
	println!("{}", c1.area());
	println!("{}", c2.area());
	
	// 4. inflate 만들기
	c2.inflate(2.0); // 반지름이 2.0만큼 증가하게 해 주세요
	println!("{}", c2.area());
	
	// 5. 화면 출력
	println!("{}", c2); // 3.0, 3.0, 7.0
}