본문 바로가기

Rust

(9)
트레이트, 라이프타임 트레이트(trait)다른 언어에서의 추상 클래스 역할을 rust에서는 trait가 담당한다. trait는 함수의 인자와 반환에도 활용 가능하다.외부 타입에 외부 트레이트를 구현하는건 불가능하다.트레이트나 타입 둘 중 하나는 내 크레이트에 존재해야 한다.기본 구현을 적어둘 수 있다. 트레이트 바운드 라는 것이 있다.트레이트 바운드란 위에 얘기한 함수의 인자와 반환에 활용하는 것으로 특정 trait를 구현한 타입만을 사용하도록 명시하는 것이다. trait는 다른 언어의 추상 클래스와 다르게 상속의 개념이 아닌 조립의 개념을 사용한다.그래서 impl Display + (my trait) 이런 형태로 여러 트레이트를 구현한 타입을 인자로 받거나 반환하는 트레이트 바운드가 가능하다.또한 필드를 가지지 못한다. 상..
모듈시스템 rust의 모듈 시스템에 대한 정리 cargo는 파일의 이름, 위치를 통해 빌드, 컴파일하는 파일이 라이브러리 크레이트인지 바이너리 크레이트인지 구분한다. src/lib.rs 는 라이브러리 크레이트로src/main.rs 는 프로젝트 이름을 갖는 크레이트로src/bin/*.rs 는 *.rs 각 파일의 이름을 가지는 크레이트로 더불어 Cargo.toml 파일에 지정하여 수동제어도 가능하다. crate:: , crate root 부터 탐색super::, 부모 모듈 탐색 rust는 부모가 자식을 mod 키워드로 선언해줘야 한다. pub mod로 자식을 선언하면 선언을 한 해당 부모를 통해 자식에 접근 가능해진다. mod로 선언된 자식에서는 부모의 자원에 접근 가능하지만 부모에서 자식의 자원에 접근하는 것은 기본..
열거형 (enumerate) rust에서의 열거형은 구조체와 비슷하게 선언 및 사용 스코프영역에 접근하는 :: 연산으로 접근하여 해당 열거형 타입과 값을 가져옴 사용방식을 보면 tuple 처럼 여러 인자를 받아서 사용가능한데 이를 tuple variant로 취급함.enum의 tuple variant 형식은 패턴 메칭을 통해서만 값을 꺼낼 수 있음 열거형에도 impl 타입 {} 형식으로 함수 정의가 가능하다. Option, 표준라이브러리에 정의된 enum 타입rust에는 null 개념이 없기 때문에 Option을 사용, Option에는 값의 존재 여부를 파악가능한 값들이 들어있다.Option의 코드enum Option { None, Some(T),} Option은 rust의 Prelude에 포함된 enum 타입으로 명시적으..
구조체 (struct), 약간의 메크로 얘기 구조체 선언 및 사용법은 다른 언어들과 거의 동일하다. 상속은 불가능하며 Trait이라는 개념을 사용 필드 초기화 축약법 (field init shorthand) 사용가능 구조체 업데이트 문법 (struct update syntax) 사용가능특정 필드만 따로 적고 ..기존인스턴스이름 을 작성하여 업데이트가 가능하다는 것 (소유권 옮겨질 가능성이 높은 것에 유의해야함) 튜플 구조체 (tuple structs) 도 지원. 튜플 구조체는 구조체 자체에는 이름을 지어 의미를 주지만 이를 구성하는 필드에는 이름을 붙이지 않고 타입만 적어 넣은 형태 유사 유닛 구조체 (unit-like structs) 필드가 아예 없는 구조체, 함수만 구현하거나 제네릭 인자로 활용하여 다른 struct의 함수 동작을 제어 가능..
소유권 (Ownership) 러스트 만의 메모리 관리 규칙 이라고 보면 된다. 다른 언어들은1. 가비지 컬렉터를 사용하여 메모리를 관리2. 프로그래머가 직접 메모리를 할당하고 해제하는 것을 관리 rust는 이에 대하여 1, 2번의 방식이 아닌 소유권이라는 시스템을 이용하여 메모리를 관리한다.rust는 소유권이 지켜진 상태가 아니라면 컴파일 되지 않는다.소유권은 다음의 규칙을 가진다.러스트에서, 각각의 값은 소유자 (owner) 가 정해져 있습니다.한 값의 소유자는 동시에 여럿 존재할 수 없습니다.소유자가 스코프 밖으로 벗어날 때, 값은 버려집니다 (dropped).이 규칙을 통해 메모리의 할당과 해제를 수행한다. 만약 프로그래머가 java를 사용하여 객체를 만들면 가비지컬렉터가 메모리를 해제하고 C를 사용하여 메모리를 할당하면 직접..
조건, 반복문 C/C++, Java, python과 같은 언어들의 기본적인 조건식, 반복문과 다른 점만 작성한다. 조건식기본적인 if , else if , else 구조를 사용한다.rust의 조건식에는 무조건 bool 타입만이 가능하다.let number = 3;if number > 3 {}if number { //error} rust에서의 if ,else if, else 의 조건식은 expression이다.이는 let 의 우변에 존재 가능함을 의미한다.{} 의 내부 값은 결과값이기에 ; 이 붙으면 무조건 () 을 x에 바인딩함에 유의해야 한다.그리고 바인딩을 하든 안하든 모든 {} 블록 내부의 결과값에 대한 타입은 동일해야한다. let flag = true;let x = if flag {5} else {6}; 반..
데이터 타입, 함수 1. 데이터 타입데이터 타입은i8 ~ i128, u8 ~ u128 , isize, usize가 존재 bool 타입이 존재하며 char 타입이 특이하게도 32비트 크기로 유니코드를 지원하는 타입이다. tuple과 배열을 지원한다. 튜플의 경우 접근시 x = (1, 2, 3) 일 때 x.0, x.1, x.2 이런식으로 . 을 이용하여 접근한다. 배열의 경우 a[i32; 5] 이런식으로 선언되어있으면 i32 타입의 5개 숫자를 저장하고 있다는 뜻이다. 이 외의 타입에 대하여 C, Java, python 등의 언어들과 크게 다른 점은 없다. 2. 함수러스트의 함수 선언은 fn 키워드를 사용한다.러스트의 cargo는 main.rs의 fn main () 함수가 존재해야 컴파일 및 빌드가 가능하다.이는 cargo가 ..
Crate와 Library rust는 crate 라는 개념을 사용한다. crate는 코드 덩어리? 코드 모음? 을 의미하는데 일반적으로 우리가 빌드하고 사용하는 코드도 crate로 칭하며Library도 Library crate라고 칭한다. 이러한 Library crate들은 Cargo.toml 파일에 의존성을 명시해줘야 빌드에 사용 가능하다.Cargo.toml에 의존성을 명시하고 빌드하면 Cargo.lock에 해당 기록이 남게 된다.Cargo.lock 파일을 이용하면 파일의 의존성 기록이 정확하게 남게 되기에 다른 사람들에게 공유할 때 도움이 되며 파일의 의존성을 다시 복구할 때 사용된다. rust에 기본적으로 내장되어있거나 제공해주는 crate들에 대한 정보를 보고 싶으면 아래 명령어를 사용하여 사이트에 접속할 수 있다. car..