Rust(8)
-
[Rust/러스트] 트레잇(trait) 정리
■ 트레잇 트레잇은 타입들이 공통적으로 갖는 동작에 대해 추상화하도록 해줍니다. 이는 Java의 Interface에서 추상화 함수를 정의함으로써 강제력을 제공하는것과 유사합니다. 트레잇을 제네릭 파라미터의 타입으로 사용하는 상황에서 트레잇 바운드를 통해 서로 다른 구조체에 연관성을 제공할 수 있습니다. ◆ 트레잇 구현 Animal 트레잇 타입으로 구현한 Dog는 추상화된 custom_bark 메소드와 구현된 common_bark 메소드 두가지 메소드를 갖습니다. custom_bark 메소드는 Dog 구현부(impl)에서 강제적으로 정의가 되어야 하지만, common_bark 메소드는 정의하지 않고 Animal 트레잇 타입으로 구현한 모든 구조체에서 사용할 수 있습니다. trait Animal{ // 선언..
2022.02.25 -
[Rust/러스트] 제네릭(Generic) 정리
■ 제네릭 제네릭은 컨셉의 복제를 효율적으로 다루기 위한 도구로서, 구체화된 타입이나 다른 속성들에 대하여 추상화된 대리인의 역할을 수행합니다. 제네릭은 함수, 구조체, 열거형, 메소드를 정의할 때 사용할 수 있습니다. ◆ 제네릭 함수 활용 제네릭을 함수에 활용함으로써 다양한 타입의 파라미터를 받아 작업을 수행할 수 있습니다. 예시) T는 [i32], [f32], [&str] 타입의 파라미터를 받고 있으며, 파라미터를 그대로 반환하는 show 함수를 통해 함수에서의 제네릭 활용법을 확인할 수 있습니다. fn show(data : T) -> T { data } fn main(){ println!("i32 data : {}", show(29)); println!("f32 data : {}", show(0.2..
2022.02.23 -
[Rust/러스트] 벡터 다루기
■ 벡터 벡터는 데이터량이 컴파일 타임에 결정되지 않아도 되며, 프로그램 실행 시 늘어나거나 줄어들 수 있기 때문에 힙에 저장됩니다. 또한 메모리 상에 서로 이웃하도록 모든 값을 단일 데이터 구조 안에 하나 이상의 값을 저장하도록 해줍니다. 벡터는 같은 타입의 값만을 저장할 수 있으며, 벡터는 스코프 밖으로 벗어날 시 해제됩니다. ◆ 벡터 생성 벡터를 생성하는 방법은 두 가지입니다. 첫번째, 제네릭을 통한 데이터 타입 설정과 Vec 구조체의 new 함수를 통한 벡터 생성 두번째, vec! 매크로를 통한 벡터 생성 fn main(){ // new 함수를 활용하여 벡터 생성 let v1 : Vec = Vec::new(); // vec! 매크로를 활용하여 벡터 생성 let v2 : Vec = vec![1,2,..
2022.02.21 -
[Rust/러스트] 열거형(enum) 정리
■ 열거형 열거형은 하나의 타입이 가질 수 있는 값들을 다양하게 열거함으로써 타입을 정의할 수 있습니다. 열거형의 항목은 다양한 타입으로 설정할 수 있으며, 열거형은 구조체와 같이 메소드와 연관함수를 구현할 수 있습니다. ◆ 다양한 타입으로 설정 Info 열거형의 항목을 다양하게 String, u32, 구조체, 열거형으로 정의함으로써 열거형의 특징을 확인할 수 있습니다. #[derive(Debug)] enum Gender{ Male, Female, } #[derive(Debug)] enum Info{ // String 타입 Name(String), // u32 타입 Age(u32), // 구조체 Location{x : i32, y : i32}, // 열거형 Gender(Gender) } fn main()..
2022.02.20 -
[Rust/러스트] 소유권(Owner)
■ 소유권 소유권은 러스트의 핵심 기능으로써, 모든 프로그램은 실행하는 동안 컴퓨터의 메모리를 사용하는 방법을 관리해야 합니다. 러스트가 아닌 다른 몇몇 언어들은 프로그램이 실행될 때 더 이상 사용하지 않는 메모리를 끊임없이 찾는 가비지 콜렉션을 갖고 있으며, 이는 프로그래머가 직접 명시적으로 메모리를 할당하고 해제해야 합니다. 이와 달리 러스트의 메모리는 컴파일 타임에 컴파일러가 체크할 규칙들로 구성된 소유권 시스템을 통해 관리됩니다. 따라서 소유권 기능들은 런타임 비용이 발생하지 않습니다. 소유권을 잘 이해하기 위해 소유권의 규칙과 스택(Stack), 힙(Heap) 메모리에 역할과 기능에 대해 알아둘 필요가 있으며, 아래에서 간단히 확인해 보겠습니다. ◆ 소유권 규칙 러스트의 각각의 값은 해당값의 오..
2022.02.17 -
[Rust/러스트] 조건문 정리
■ 조건문 조건의 상태가 참인지 거짓인지에 따라 분기에 실행 흐름을 제어할 수 있는 작성 방식입니다. ◆ IF 표현식 if 표현식은 제어하고자 하는 조건의 수에 따라 단일 if문, if~else문, if~else if~ else문으로 작성 할 수 있습니다. 1. 단일 if 문 number 변수는 10을 갖고, if 조건은 number가 10과 같은지를 확인합니다. 참(true)일 경우 if 분기를 처리하며, "Number 는 10 이다." 출력문이 호출됩니다. 거짓(false)일 경우 if 분기를 처리하지 않고 "조건문 테스트 종료." 출력문이 호출됨과 동시에 종료됩니다. fn main() { let number = 10; if number == 10{ println!("Number 는 10 이다.");..
2022.02.16