본문 바로가기

Rust

[Rust]6. 소유권(Ownership) 러스트의 꽃이라고 할수 있는 파트가 왔습니다.메모리 문제를 해결하기 위해, 다른 언어들은 두가지 방법을 활용합니다.-C,C++같은 언어에서는 직접 할당한것을 직접 수거해주어야합니다.-Java,Python같은 언어에서는 가비지 컬렉터를 이용합니다.러스트는 두가지 방법을 모두 쓰지 않고, 소유권(Ownership)이라는 개념을 통해 이를 해결합니다. 소유권 규칙(Ownership rules)1. 러스트의 모든 값들은 주인(Owner)라 불리는 변수를 갖는다2. 한 값에 대한 주인은 오직 하나만 존재한다.3. 주인이 없는 값은 드랍(drop)된다. 물건마다 주인이 있고, 결국 주인없는 물건은 처분한다.이게 소유권 규칙입니다. 이를 감각적으로 설명하자면 변수를 물건 다루듯 다룬다고 생각하면됩니다.예를들어 철수가.. 더보기
[Rust]5. 흐름 제어 (조건문과 반복문) 흐름 제어(Control Flow)는 보통 조건문 반복문을 얘기합니다.말그대로 프로그램의 흐름을 조건에 따라 달리 처리해줄수 있기 때문이죠. 1. 조건문 문법Rust에서 조건문은 다른 언어와 거의 유사하나, 차이점을 짚어보겠습니다.러스트에서 if문은 다음과 같이 사용합니다.if 조건식{명령}보시다시피 조건식에 소괄호를 쓰지 않는 점을 빼곤 C와 대동소이합니다 단, 이때 조건식의 반환값이 boolean인 Expression이어야합니다.그냥 평범하게 사용할때는 크게 신경쓸 필요는 없습니다. 예를들어 짝수임을 판별하기 위해 조건식으로 number%2 == 0을 사용한다 쳐도, 별 문제가 없습니다.그 이유는 조건에 대한 연산들 (==, =, >, 더보기
[Rust]4. 함수 1.함수 선언하기메인함수에서 보시다시피, Rust의 함수선언 예약어는 fn입니다. fn main(){} 이처럼, 다른 함수도 선언할수 있습니다. fn AwesomeFunction(){}fn main(){AwesomeFunction();} 함수 정의에서 Rust는 굉장히 편리한 구석이 있습니다.바로 함수 정의 위치가 중요하지 않습니다.즉,fn main(){AwesomeFunction();}fn AwesomeFunction(){}다음과 같이 선언해도 문제가 없습니다. 2.함수 매개변수함수에 매개변수 적는법은 다음과 같습니다.fn AwesomeFunction(x:i32,y:u8){}매개변수명:자료형의 형태로, 쉼표로 이어적어주면 됩니다.이때 매개변수의 자료형은 반드시 적어주어야합니다.컴파일러가 무슨 함수를 의.. 더보기
[Rust]3. 컴파운드 타입 컴파운드는 영어로 결합을 의미합니다.즉 정수 여러개가 들어있는 배열과도 같은 자료형들을 컴파운드 타입이라고 합니다.러스트에서는 두가지가 있습니다. 1.배열러스트의 배열은 C/C++에서의 배열과 유사합니다.let a: =[1,2,3,4];a[0]; // 값은 1배열의 길이를 변경할 수 없고, 원소도 모두 하나의 자료형으로만 구성 될 수 있습니다.(만약 길이가 변하는 동적 배열이 필요하다면, 표준 라이브러리에 있는 Vector를 사용하시면 됩니다.)각 원소를 참조하기 위해, 대괄호[]를 쓴다는것 또한 동일합니다. 선언 방법은 다음과 같습니다.let a=[1,2,3,4];자료형 표현은let a:[i32; 4] =[1,2,3,4];다음과 같이, [자료형; 배열의 길이]로 표현해주면 됩니다. 2.튜플STL을 다뤄.. 더보기
[Rust]2. 스칼라 타입 러스트에서는 자료형을 크게 둘로 나눕니다.하나는 스칼라 타입 하나는 컴파운드 타입입니다.이 글에서는 스칼라 타입을 다룹니다. 아래는 러스트에서 사용되는 정수 자료형의 종류입니다.LengthSignedUnsigned8-biti8u816-biti16u1632-biti32u3264-biti64u64128-biti128u128archisizeusize자료형은 타입 어노테이션으로 표기합니다. 즉let a:u32=1;이런식으로, 변수명에 콜론(:)과 자료형 이름을 덧붙입니다.signed 정수는 iunsigned 정수는 u이고, 거기에 추가로 사용할 비트수를 붙이는 식입니다. 이때, isize와 usize는 컴퓨터에 따라 사이즈가 달라집니다.32비트 운영체제에서는 32비트, 64비트 운영체제에서는 64비트가 할당됩니.. 더보기
[Rust]1. 변수와 상수 Rust에서, 변수와 상수에 대한 예약어로 다음 세가지가 있습니다.1.let2.mut3.const 하나씩 알아보죠. 1.letlet은 변수 선언입니다.예를들어,let a = 1;하면 값이 1인 변수 a가 정의됩니다.그러나 let으로 선언된 변수는 대입도 불가능해 값을 변경할수 없습니다. 이를 immutable하다고 합니다. 당연한 얘기지만, 변수인데 값을 변경할수 없으면, 프로그래밍하기 참 곤란해지겠죠.그래서 있는게 예약어 mut입니다. 2.mutmut는 변수가 값을 변경할수 있게 만들어주는 예약어입니다.예를들어, let mut a= 1; 이렇게하면, 값을 변경할수 있는 변수 a가 정의되고, 그 값은 1이됩니다.이렇게 값을 변경할수 있는 변수를 mutable 하다고 합니다. 3.const값을 변경할수 없.. 더보기
[Rust]0. 시작하기, 출력 안녕하세요. Rust 문법에 대해 소개하는 게시글입니다. 들어가기 전에,1.해당 강좌는 기본적인 프로그래밍 지식이 있다고 전제합니다.2.앞으로의 강좌 내용의 출처는 공식 문서를 참고합니다.3.공식 문서의 일부 내용이 누락될 수 있습니다. 가급적이면 공식 문서 원문을 읽는 것을 추천합니다.4.컴퓨터에 개발 환경을 구축하기가 조금 번거로우므로, 온라인 IDE 사이트 ideone.com을 활용합니다. Hello, world! 출력하기일단 ideone.com에 접속하여, 하단의 언어부분을 C++에서 Rust로 바꿔 줍니다.그 다음 아래 코드를 입력한후, Run 버튼을 클릭해보세요.1234567use std::io::stdin;use std::io::BufRead;use std::io::BufReader;fn m.. 더보기