Rust (18) 썸네일형 리스트형 자바스크립트 러스트 클로저 비교, 메모리관리 클로저란 함수가 정의된 스코프가 아닌 외부 스코프에서 함수가 실행되더라도, 스코프 밖에 있는 변수를 기억하고 이 외부 변수에 계속 접근할 수 있는 경우를 의미한다. 1. 자바스크립트 코드function greeting(msg) { return function product(pro){ console.log(`${pro} ${msg} !`); }; }; // greeting()이 호출되면서 새로운 인스턴스 생성 var good1 = greeting("입고"); var good2 = greeting("출고"); // 인스턴스에 새로운 msg변수가 사용된다. good1("콩나물"); // 콩나물 입고! good1("책"); // 책 입고! good2("신발"); // 신발 출고! greeting(msg) 인자에.. Rust Closure 클로저는 바깥쪽 함수에 속한 데이터를 사용할 수 있다. 이것을 변수 캡처라고 말한다. 클로저를 사용할때는 ||기호를 붙인다. ||기호안에는 쓰고싶은 단어를 자유롭게 넣을수 있다 예를들어 |city|, |monster| 이렇게 eg) 1. City 스트럭트에 있는 변수 monster_attacks_risk: f64타입을 외부에서 사용하고 싶다 struct City { name: String, population: i64, country: String, monster_attacks_risk: f64, } struct Preference { acceptable_monster_risk: f64, } 2. fn타입은 함수만 받을 수 있는데 Fn트레이드를 사용하면 외부에서 함수와 클로저를 모두 받을 수 있다. fn.. 러스트 impl 트레이트 반환타입 제네릭타입을 많이 쓰다보면 괄호가 많이 달린 반환 타입을 볼수 있다.use std::iter; use std::vec::IntoIter; fn cyclical_zip(v:Vec, u: Vec) -> iter: Cycle { v.into_iter().chain(u.into_iter()).cycle() } 이럴때 반환타입을 impl Trait으로 리펙토링하면 거기에서 구현하고 있는 트레이드만 지정할 수 있게 된다. use std::fmt::Display; fn print(val: impl Display) { println!("{}", val); } fn main() {} 하지만 단점도 존재하는데 함수에서 반환되는 Circle, Triangle, Rectangle 타입이 제각각일수 있어서 오류가난다. 명심해야.. 러스트 제네릭 스트럭트 pub struct Queue { older: Vec, younger: Vec Queue는 임의의 요소 타입 T에 대해서라고 읽으면 된다. 예를들어 Queue에서 T의 타입은 String타입 Queue에서 T의 타입은 char타입 Vec 벡터타입도 제네릭스트럭트이다. impl 블록은 함수의 집합체이고 스트럭트 타입의 메서드가 된다. pub struct Queue { older: Vec, younger: Vec, } // struct 필드에 접근할 때는 .을 붙인다. impl Queue { // Self는 자신의 대상이되는 타입을 가르킨다 여기서 Self가 가르키는것은 Queue이다. pub fn new() -> Self { //객체를 사용하기위해 생성자 함수 정의 Queue { older: Vec::ne.. 러스트 모듈(pub mod) 웹애플리케이션을 만들 때 보면 외부 공개 모듈 pub(public이라는뜻)을 사용하여 프로그램을 기능별로 분리한다 모듈은(mod)는 스코프 범위 단위, 모듈의 관계는 트리 구조로 표현할 수 있다. mod 안에 pub mod라는 서브모듈이 있고 use를 사용해 서브 모듈을 꺼내서 사용할 수 있다. pub는 해당 모듈을 외부로 노출시킨다는 의미이다. mod random { // linear 모듈 선언 pub mod linear { use std::num::Wrapping; // 선형합동법으로 난수 생성 pub fn rand(seed: &mut u32) -> u32 { let (a, c) = (1u32, 2u32); // Wrapping을 사용하여 연산 오버플로우를 무시한다. *seed = (Wrapping(.. 러스트 제네릭(generic) 함수 정의 https://www.yes24.com/Product/Goods/116586619 만들면서 배우는 러스트 프로그래밍 - 예스24 고효율, 현대적 프로그래밍 언어 Rust의 결정적 해설서!러스트는 효율적이고 신뢰할 수 있으며 생산성이 높은 언어로, 프로그래머가 가장 배우고 싶어 하는 언어로 꼽힌다. 배울 가치가 높은 언 www.yes24.com 공부한것을 정리한 내용입니다 제네릭은(generic)은 추상적인 타입을 지정해 다양한 데이터 타입 조작을 가능하게 하는 프로그래밍 기법이다. 러스트는 타입 체크를 엄격하게 해서 타입이 다르면 컴파일 되지 않아 만약 비슷한 함수가 여러개 있으면 실수가 많아져 코드 중복을 줄이고 실수를 방지하고자 이때 제네릭을 사용하게 된다. fn add_i32(a:i32, b: i3.. 러스트 프로그래밍 - 스코프를 벗어나면 drop https://www.yes24.com/Product/Goods/116789691 프로그래밍 러스트 - 예스24 『러스트 프로그래밍 공식 가이드』보다 더 친절하게, 한층 더 고급 기능까지 다룬다!이 책은 메모리 안전성과 신뢰할 만한 동시성에 예측 가능한 성능을 더한 러스트의 기능이 어떤 식으로 메 www.yes24.com https://www.yes24.com/Product/Goods/116586619 만들면서 배우는 러스트 프로그래밍 - 예스24 고효율, 현대적 프로그래밍 언어 Rust의 결정적 해설서!러스트는 효율적이고 신뢰할 수 있으며 생산성이 높은 언어로, 프로그래머가 가장 배우고 싶어 하는 언어로 꼽힌다. 배울 가치가 높은 언 www.yes24.com 실습하면서 공부하고 정리한 것을 올린것입니다.. 러스트 프로그래밍 - 참조 & 와 빌림(borrow) https://www.yes24.com/Product/Goods/116586619 만들면서 배우는 러스트 프로그래밍 - 예스24 고효율, 현대적 프로그래밍 언어 Rust의 결정적 해설서!러스트는 효율적이고 신뢰할 수 있으며 생산성이 높은 언어로, 프로그래머가 가장 배우고 싶어 하는 언어로 꼽힌다. 배울 가치가 높은 언 www.yes24.com 책을 읽고 실습한 것을 정리한 내용을 올린 것입니다. 소유권을 일시적으로 빌려 주고싶을 때 함수를 만든 뒤 함수 인자에 참조자 &를 넣어서 전달한다. 그래서 소유권 문제를 해결 할수 있다 이전 1 2 3 다음 목록 더보기