Language/Rust

반응형
반응형
Language/Rust

[Rust]Method syntax

Method 함수와 유사하며, fn 키워드와 이름으로 메서드를 선언하고 매개 변수와 반환 값을 가질 수 있고 메서드가 다른 곳에서 호출될 때 실행되는 일부 코드를 포함한다. 함수와 달리 메서드는 구조체의 컨텍스트 내에서 정의되며, 첫번째 매개변수는 항상 self 메서드가 속한 구조체의 인스턴스를 나타내며 호출된다. 1) 방법 정의 impl Rectangle { fn width(&self) -> bool { self.width > 0 } } fn main() { let rect1 = Rectangle { width: 30, height: 50, }; if rect1.width() { println!("The rectangle has a nonzero width; it is {}", rect1.width);..

Language/Rust

[Rust]Structure 구조체

Structure structure유형은 여러 데이터를 저장 가능하고, 데이터마다 다른 타입 지정이 가능하다는 점에서 튜플유형과 유사하다. 튜플과의 차이점은 각 데이터의 명칭 부여 가능가 가능하기 때문에 데이터의 의미가 분명해지고, 튜플보다 유동적으로 데이터를 관리할 수 있다는 것이다. 1) 구조체 정의 struct User { active: bool, username: String, email: String, sign_in_count: u64, } 2) 구조체 인스턴스 생성 모든 필드값을 채워주어야 한다. let user1 = User { email: String::from("it.progrowh@gmail.com"), username: String::from("someuser"), active: tr..

Language/Rust

[Rust]소유권 - string slice

String slice 슬라이스를 사용하면 전체 컬렉션이 아닌 연속적인 요소 시퀀스를 참조할 수 있다. 슬라이스는 일종의 참조이므로 소유권을 갖지 않는다. 먼저 가장 간단한 형태의 slice를 살펴보자. fn first_word(s: &String) -> usize { let bytes = s.as_bytes(); // b' ' : 공백 byte값 32 for (i, &item) in bytes.iter().enumerate() { if item == b' ' { return i; } } s.len() } 문장의 첫 번째 단어를 찾는 함수를 만들고 찾을 경우 해당 단어의 인덱스를 반환하는 형태로 구현했다. String 요소별로 살펴보고 값이 공백인지 확인해야 하므로 String을 사용하여 바이트 배열로 ..

Language/Rust

[Rust]소유권 - referrence, borrowing

Reference & Borrowing 참조와 차용 fn main() { let s1 = String::from("hello"); let len = calculate_length(&s1); println!("The length of '{}' is {}.", s1, len); } fn calculate_length(s: &String) -> usize { s.len() } s1을 선언하고 calculate_length()참수를 호출할 때 사용된 파라미터는 s1의 값을 참조하는 &s1이다. &기호(ampersands)는 참조를 나타내며, 참조는 소유권을 이전하지 않고도 해당 값을 사용할 수 있도록 한다. 따라서 calculate_length의 아규먼트인 s는 아래와 같이 s1을 참조하게 된다. Referen..

Language/Rust

[Rust]Ownership 소유권

Rust를 매력적이고 특별한 언어로 만드는 이유를 이해하려면, 반드시 Ownership 오너십 규칙을 알아야 한다. 모든 프로그래밍 언어는 각자의 방법으로 메모리 관리를 한다. 1. Garbage collection(GC)를 이용해 자동으로 안쓰는 메모리를 해제 (e.g. Java, Python, C#, Javascript, Go 등 대부분의 언어) 2. 메모리 할당과 해제를 프로그래머가 직접 명시 (e.g. C, C++, Object-C 등) Rust는 위 둘 중 어느것도 아닌 ownership 시스템을 통해 메모리 관리를 한다.이는 컴파일러가 몇 가지 규칙들을 기준으로 컴파일타임에 실시한다. 오너십 개념을 제대로 이해하기 위해서는 heap과 stack에 대한 이해가 있어야 한다. 이 개념은 원문에서 ..

Language/Rust

[Rust]Control Flow 제어문

If문 조건은 반드시 boolean 값이어야하고 그렇지 않으면 에러가 발생한다. let number = 7; if number < 5 { println!("condition was true"); } else { println!("condition was false"); } // condition was false if number { println!("number was three"); } // ERROR | 1 | if number { | ^^^^^^ expected `bool`, found integer 1) if else if let number = 6; if number % 4 == 0 { println!("number is divisible by 4"); } else if number % 3 =..

emojiyeon
'Language/Rust' 카테고리의 글 목록