Rust (18) 썸네일형 리스트형 [Rust] 트레잇(Trait) 타입들이 공통적으로 갖는 동작에 대하여 추상화하도록 해주는 도구인 트레잇에 대해 알아보겠습니다. 트레잇(Trait)은 다른 언어들에서 인터페이스라고 부르는 기능과 유사합니다. pub trait Summarizable { fn summary(&self) -> String; } 트레잇의 선언은 위와 같이 가능합니다. trait 다음 이름이 오고 메소드의 선언을 적어줍니다. 선언된 트레잇은 다음과 같이 구현될 수 있습니다. pub struct NewsArticle { pub headline: String, pub location: String, pub author: String, pub content: String, } impl Summarizable for NewsArticle { fn summary(&se.. [Rust] 테스트 작성한 코드를 배포하기 전에 테스트를 해보는 것은 매우 중요한 작업입니다. 테스트 함수의 본체는 통상적으로 다음의 세 가지 동작을 수행합니다. 필요한 데이터 혹은 상태를 설정하기 우리가 테스트하고 싶은 코드를 실행하기 그 결과가 우리 예상대로인지 단언하기(assert) 러스트에서 테스트 함수는 테스트 속성이 주석으로 달린 함수입니다. 테스트 함수는 함수 선언 fn 전 라인에 #[test]를 추가하는 것으로 만들 수 있습니다. 테스트 함수가 작성된 후 cargo test 커맨드를 실행하면 프로젝트 내의 test속성이 달려있는 함수들을 실행하고 각 테스트 함수가 성공, 실패했는지를 나타냅니다. 예시를 보겠습니다. #[cfg(test)] mod tests { #[test] fn it_works() { let .. [Rust] 제네릭(Generic) 제네릭에 대해 알아보겠습니다. 제네릭은 쉽게말해 모든 데이터 타입의 상위 타입이라고 생각하시면 쉬울 것 같습니다. struct Point { x: T, y: T, } fn main() { let integer = Point { x: 5, y: 10 }; let float = Point { x: 1.0, y: 4.0 }; } 구조체의 데이터 타입을 제네릭으로 선언했습니다. main 함수에서 두 개의 Point 구조체가 선언되었는데 두 구조체가 서로 다른 데이터 타입(정수형, 실수형) 을 가지고 있는 것을 확인하실 수 있습니다. struct Point { x: T, y: T, } fn main() { let wont_work = Point { x: 5, y: 4.0 }; } 하지만 Point 로 선언된 구조.. [Rust] 벡터 벡터는 메모리 상에 서로 이웃하도록 모든 값을 집어넣는 단일 데이터 구조 안에 하나 이상의 값을 저장하도록 해줍니다. 벡터는 배열과 같이 같은 타입의 값만을 저장할 수 있습니다. 벡터의 선언은 다음과 같이 할 수 있습니다. let v: Vec = Vec::new(); let mut v = Vec::new(); 벡터를 선언하면서 아무 값도 저장하지 않았기 때문에 을 통해 어떤 데이터 타입을 저장할지 명시해주는 것이 좋습니다. 선언과 동시에 값을 지정한다면 다음과 같은 선언도 가능합니다. let v = vec![1, 2, 3]; let v = vec![1, 2, 3, 4, 5]; vec.push(6); //벡터에 6을 저장 let third: &i32 = &v[2]; let third: Option = v... [Rust] 해쉬맵 (hash map) 해쉬맵 HashMap(K, V)은 K 타입의 키에 V타입의 값을 매핑한 것을 저장합니다. 생성 해쉬맵은 std::collections::HashMap 모듈을 임포트 해서 사용할 수 있으며 String, Vector처럼 ::new를 통해 생성할 수 있습니다. use std::collections::HashMap; let mut scores = HashMap::new(); insert 메소드로 값을 저장할 수 있습니다. scores.insert(String::from("Blue"), 10); scores.insert(String::from("Yellow"), 50); 벡터의 collect 메소드를 통해 해쉬맵을 생성할 수 도 있습니다. use std::collections::HashMap; let teams.. [Rust] 문자열 러스트에서 문자열 선언에는 여러 방법이 있습니다. let mut s = String::new(); // 비어있는 문자열 생성 let data = "initial contents"; let a = data.to_string(); let b = "initial contents".to_string(); // 3, 4라인과 동일 let c = String::from("initial contents"); // 위와 동일 to_string과 String::from은 모두 리터럴로부터 스트링을 생성하는 같은 일을 합니다. 어떤 것을 사용하는가는 코더의 스타일에 따라 사용하시면 됩니다. 문자열 추가 let mut s = String::from("foo"); s.push_str("bar"); push_str로 foo 뒤.. [Rust] Option 과 Result Option 러스트에는 기본적으로 null이 존재하지 않습니다. 하지만 null을 표현하기 위한 방법으로 Option이 존재합니다. enum Option { Some(T), None, } let x = Some(7); let y = None; enum으로 Option을 정의하며 T는 제네릭 타입으로 어떤 데이터 타입도 가능합니다. 따로 만들어 줄 필요 없이 기본 라이브러리에 저장되어 있습니다. fn main() { let some_number = Some(5); let some_string = Some("a string"); println!("some_number : {}",some_number.unwrap()); println!("some_string : {}", some_string.unwrap()).. [Rust] match 흐름 제어 연산자 러스트는 match라고 불리는 극도로 강력한 흐름 제어 연산자를 가지고 있는데 이는 우리에게 일련의 패턴에 대해 어떤 값을 비교한 뒤 어떤 패턴에 매치되었는지를 바탕으로 코드를 수행하도록 해줍니다. match는 enum과 같이 사용했을 때 매우 강력한 도구로 사용될 수 있습니다. enum Coin { Penny, Nickel, Dime, Quarter, } fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => 1, Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter => 25, } } 함수의 매개변수로 열거형 Coin을 받고 match coin으로 coin이 어떤 것에 해당되는지에 따라 코드를 실행합.. 이전 1 2 3 다음