<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rust on 세모난 책</title><link>https://semonan.com/kr/tags/rust/</link><description>Recent content in Rust on 세모난 책</description><generator>Hugo</generator><language>ko-KR</language><lastBuildDate>Mon, 02 Dec 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://semonan.com/kr/tags/rust/rss.xml" rel="self" type="application/rss+xml"/><item><title>Install and Hello world</title><link>https://semonan.com/kr/book/programming/rust/install-hello-world/</link><pubDate>Sun, 29 Sep 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/install-hello-world/</guid><description>&lt;h1 id="rust-설치하고-hello-world-출력"&gt;Rust 설치하고 Hello world 출력&lt;a class="anchor" href="#rust-%ec%84%a4%ec%b9%98%ed%95%98%ea%b3%a0-hello-world-%ec%b6%9c%eb%a0%a5"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="rust-설치"&gt;Rust 설치&lt;a class="anchor" href="#rust-%ec%84%a4%ec%b9%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust 공식 사이트에서 설치 프로그램을 다운로드 후 실행하세요.&lt;br&gt;
설치는 간단하게 진행됩니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rust download : &lt;a href="https://www.rust-lang.org/tools/install" rel="noopener noreferrer" target="_blank"&gt;&lt;code&gt;https://www.rust-lang.org/tools/install&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="hello-world"&gt;Hello world&lt;a class="anchor" href="#hello-world"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;간단한 메시지를 출력하는 프로그램을 만들어 봅시다.&lt;br&gt;
저는 &lt;code&gt;D:\works\rust\practice1&lt;/code&gt; 경로에 &lt;code&gt;code1.rs&lt;/code&gt;라는 파일을 생성하고, 다음과 같이 코드를 작성했습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, semonan.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Rust는 &lt;code&gt;main()&lt;/code&gt;로부터 시작됩니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fn&lt;/code&gt;이라는 키워드를 통하여 함수를 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;println!(&amp;quot;~~~&amp;quot;);&lt;/code&gt; 를 통하여 메시지를 출력할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;println!()&lt;/code&gt; 에서 &lt;code&gt;!&lt;/code&gt;는 Rust의 Macro를 호출한다는 의미입니다.&lt;/li&gt;
&lt;li&gt;Rust는 Tab대신 Space 4칸을 사용하므로, &lt;code&gt;println!()&lt;/code&gt; 앞에 Space 4칸을 사용했습니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;println!(&amp;quot;~~~&amp;quot;);&lt;/code&gt; 처럼 코드 한 줄이 끝날때 &lt;code&gt;;&lt;/code&gt; 로 끝납니다. (문법적으로 &lt;code&gt;;&lt;/code&gt;으로 끝나지 않는 경우가 있으므로 상황에 맞게 사용해야 합니다.)&lt;br&gt;
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;다음은 소스코드를 컴파일 해 봅시다. &lt;br&gt;
rust의 컴파일러는 &lt;code&gt;rustc&lt;/code&gt; 입니다.&lt;br&gt;
소스코드 파일이 있는 경로에서 &lt;code&gt;rustc code1.rs&lt;/code&gt; 명령을 입력하면 컴파일 됩니다.&lt;br&gt;
&lt;img src="https://semonan.com/images/book/programming/rust/install-hello-world/compile.png" alt="" width="450"&gt;&lt;/p&gt;</description></item><item><title>변수의 가변성</title><link>https://semonan.com/kr/book/programming/rust/variability-of-variables/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/variability-of-variables/</guid><description>&lt;h1 id="변수의-가변성"&gt;변수의 가변성&lt;a class="anchor" href="#%eb%b3%80%ec%88%98%ec%9d%98-%ea%b0%80%eb%b3%80%ec%84%b1"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="let"&gt;let&lt;a class="anchor" href="#let"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust에서 변수를 선언할 때 다음과 같이 &lt;code&gt;let&lt;/code&gt; 키워드를 사용합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;하지만, let 은 기본적으로 불변(immutable)이기 때문에, 다음처럼 &lt;code&gt;apple&lt;/code&gt;의 값을 변경하려고 하면 에러가 발생합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;E0384&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;: &lt;span class="nc"&gt;cannot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assign&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;twice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;immutable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;variable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="let-mut"&gt;let mut&lt;a class="anchor" href="#let-mut"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;값을 수정하기 위하여 다음과 같이 &lt;code&gt;let mut&lt;/code&gt; 키워드를 사용해야 합니다.&lt;br&gt;
여기서, &lt;code&gt;mut&lt;/code&gt;는 mutable을 의미합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;변수를 사용할 때 가변(mutable)과 불변(immutable)을 명확히 구분하는 이유는 Human error를 줄이고, 가독성 개선, 디버깅 효율성 개선, SW 품질 보장 등의 장점을 가질 수 있습니다.&lt;/p&gt;</description></item><item><title>데이터 타입</title><link>https://semonan.com/kr/book/programming/rust/data-type/</link><pubDate>Thu, 07 Nov 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/data-type/</guid><description>&lt;h1 id="데이터-타입"&gt;데이터 타입&lt;a class="anchor" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0-%ed%83%80%ec%9e%85"&gt;#&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;Rust의 모든 값은 Data type을 가집니다.&lt;br&gt;
Rust는 정적 타입 언어이기 때문에 컴파일 시점에 Data type이 정해져 있어야 합니다.&lt;/p&gt;
&lt;h2 id="1-scalar-type"&gt;1. Scalar type&lt;a class="anchor" href="#1-scalar-type"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Scalar type은 값 하나를 표현하며 다음 4종류의 Scalar type이 있습니다.&lt;/p&gt;
&lt;h3 id="11-integer"&gt;1.1 integer&lt;a class="anchor" href="#11-integer"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;integer는 정수를 사용하는 type이며 소수점은 사용할 수 없습니다.&lt;br&gt;
integer type의 종류는 다음 표와 같습니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Size&lt;/th&gt;
 &lt;th&gt;Signed&lt;/th&gt;
 &lt;th&gt;Unsigned&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;8-bit&lt;/td&gt;
 &lt;td&gt;i8&lt;/td&gt;
 &lt;td&gt;u8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;16-bit&lt;/td&gt;
 &lt;td&gt;i16&lt;/td&gt;
 &lt;td&gt;u16&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;32-bit&lt;/td&gt;
 &lt;td&gt;i32&lt;/td&gt;
 &lt;td&gt;u32&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64-bit&lt;/td&gt;
 &lt;td&gt;i64&lt;/td&gt;
 &lt;td&gt;u64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128-bit&lt;/td&gt;
 &lt;td&gt;i128&lt;/td&gt;
 &lt;td&gt;u128&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arch&lt;/td&gt;
 &lt;td&gt;isize&lt;/td&gt;
 &lt;td&gt;usize&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;여기서, &lt;code&gt;i&lt;/code&gt;는 부호 있는(Signed) 정수로 양수와 음수를 사용할 수 있습니다.&lt;br&gt;
&lt;code&gt;u&lt;/code&gt;는 부호 없는(Unsigned) 정수로 양수만 사용할 수 있습니다.&lt;br&gt;
Signed는 1-Bit를 부호로 사용하기 때문에 값의 표현 범위가 Unsigned보다 작습니다.&lt;br&gt;
값의 표현 범위는 다음 수식처럼 계산할 수 있으며, $n$은 사용 비트 수를 의미합니다.&lt;/p&gt;</description></item><item><title>함수</title><link>https://semonan.com/kr/book/programming/rust/function/</link><pubDate>Mon, 02 Dec 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/function/</guid><description>&lt;h1 id="함수-function"&gt;함수 (Function)&lt;a class="anchor" href="#%ed%95%a8%ec%88%98-function"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="함수-정의"&gt;함수 정의&lt;a class="anchor" href="#%ed%95%a8%ec%88%98-%ec%a0%95%ec%9d%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;함수는 다음과 같이 &lt;code&gt;fn&lt;/code&gt; 키워드를 통하여 생성합니다.&lt;br&gt;
함수를 정의하는 순서를 고려할 필요가 없으므로 Scope 어딘가에 정의되어 있으면 됩니다.&lt;br&gt;
따라서 다음 예제 코드는 main() 함수 뒤에 hello() 함수가 위치하고 있으며 컴파일 및 실행이 정상적으로 수행됩니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="매개변수-parameter"&gt;매개변수 (Parameter)&lt;a class="anchor" href="#%eb%a7%a4%ea%b0%9c%eb%b3%80%ec%88%98-parameter"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;다음 예제 코드와 같이 함수를 호출 할 때 Parameter를 넘길 수 있습니다.&lt;br&gt;
add 함수는 i64 타입의 &lt;code&gt;a&lt;/code&gt; 와 &lt;code&gt;b&lt;/code&gt; 두 개의 Parameter를 받을 수 있습니다.&lt;br&gt;
&lt;code&gt;i64&lt;/code&gt;처럼 함수에서 Parameter를 받을 때 타입을 반드시 선언해야 합니다.&lt;br&gt;
Parameter를 여러 개 전달 할 수 있습니다.&lt;/p&gt;</description></item><item><title>문자열 자르기</title><link>https://semonan.com/kr/book/programming/rust/slices-of-collections/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/slices-of-collections/</guid><description>&lt;h1 id="문자열-자르기"&gt;문자열 자르기&lt;a class="anchor" href="#%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%9e%90%eb%a5%b4%ea%b8%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="문자열-자르기-문법"&gt;문자열 자르기 문법&lt;a class="anchor" href="#%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%9e%90%eb%a5%b4%ea%b8%b0-%eb%ac%b8%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust는 문자열을 자르기 자르기 위한 편리한 문법을 제공합니다.&lt;br&gt;
다음 코드를 통해서 알아봅시다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;&amp;amp;s[0..5]&lt;/code&gt; 처럼 코딩하면 &lt;code&gt;&amp;quot;hello&amp;quot;&lt;/code&gt;를 잘라낼 수 있습니다.&lt;br&gt;
여기서 0은 Start index를 의미하고, 5는 End index +1 를 의미합니다.&lt;br&gt;
(End index에 +1 하여 사용한다는 것을 유의하세요.)&lt;br&gt;
&lt;code&gt;&amp;amp;s[6..11]&lt;/code&gt; 처럼 코딩하면 &lt;code&gt;&amp;quot;world&amp;quot;&lt;/code&gt;를 잘라낼 수 있습니다.&lt;/p&gt;</description></item><item><title>struct</title><link>https://semonan.com/kr/book/programming/rust/struct/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/struct/</guid><description>&lt;h1 id="struct"&gt;struct&lt;a class="anchor" href="#struct"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="struct-기본적인-사용법"&gt;struct 기본적인 사용법&lt;a class="anchor" href="#struct-%ea%b8%b0%eb%b3%b8%ec%a0%81%ec%9d%b8-%ec%82%ac%ec%9a%a9%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust의 Struct 사용법을 알아 봅시다.&lt;br&gt;
다음 예제의 &lt;code&gt;struct Person { ~~~ }&lt;/code&gt; 부분은 구조체를 정의하고 있습니다.&lt;br&gt;
&lt;code&gt;Person&lt;/code&gt; 구조체는 &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;age&lt;/code&gt;, &lt;code&gt;is_student&lt;/code&gt;의 Field를 가지고 있으며, 각 Field 마다 type이 정의 되었습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;: &lt;span class="kt"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_student&lt;/span&gt;: &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;semonan.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;: &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_student&lt;/span&gt;: &lt;span class="nc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_student&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_student&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;let mut person = Person { ~~~ }&lt;/code&gt;과 같이, 구조체는 Instance로 생성되어야 사용할 수 있습니다.&lt;br&gt;
위 예제에서는 각 Field의 값을 변경할 수 있도록 mutable로 Instance를 생성했습니다.&lt;br&gt;
&lt;code&gt;person.name&lt;/code&gt;, &lt;code&gt;person.age&lt;/code&gt;, &lt;code&gt;person.is_student&lt;/code&gt; 처럼 코딩하면 구조체의 값을 읽을 수 있습니다.&lt;br&gt;
&lt;code&gt;person.age = 13;&lt;/code&gt; 처럼 코딩하면 값을 변경할 수 있습니다.&lt;/p&gt;</description></item><item><title>struct method</title><link>https://semonan.com/kr/book/programming/rust/struct-method/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/struct-method/</guid><description>&lt;h1 id="struct-method"&gt;struct method&lt;a class="anchor" href="#struct-method"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="method-란"&gt;Method 란?&lt;a class="anchor" href="#method-%eb%9e%80"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Method는 Struct 안에 포함되어 있는 것이 다를 뿐, Function과 같다고 볼 수 있습니다.&lt;br&gt;
Method를 정의 하는 방법을 알아 봅시다.&lt;br&gt;
다음 예제의 &lt;code&gt;struct Person { ~~~ }&lt;/code&gt; 처럼 Person Struct를 정의 했습니다.&lt;br&gt;
&lt;code&gt;impl Person&lt;/code&gt; 에서 &lt;code&gt;impl&lt;/code&gt;은 implementation의 약어입니다.&lt;br&gt;
&lt;code&gt;impl { ~~~ }&lt;/code&gt; 안에 만들어지는 Function이 Method입니다.&lt;br&gt;
&lt;code&gt;fn speak(self) { ~~~ }&lt;/code&gt;처럼 Method를 만들었고, 첫번째 Parameter로 self를 전달 받았습니다.&lt;br&gt;
&lt;code&gt;self&lt;/code&gt;는 자기 자신인 &lt;code&gt;struct Person&lt;/code&gt;을 가르킵니다.&lt;br&gt;
반드시 Method의 첫번째 Parameter로 &lt;code&gt;self&lt;/code&gt;를 받아야 합니다. 그렇지 않으면 Compile error가 발생합니다.&lt;br&gt;
&lt;code&gt;println!(&amp;quot;hi, {}&amp;quot;, self.name);&lt;/code&gt; 은 &lt;code&gt;self.name&lt;/code&gt;을 print하고 있습니다.&lt;br&gt;
여기서 &lt;code&gt;self.name&lt;/code&gt;은 &lt;code&gt;struct Person { name: String, }&lt;/code&gt; 안의 &lt;code&gt;name: String&lt;/code&gt;을 가리키는 것입니다.&lt;br&gt;
&lt;code&gt;let person = Person{ ~~~ };&lt;/code&gt; 처럼 Instance를 생성 후, &lt;code&gt;person.speak()&lt;/code&gt; 처럼 Method를 호출 할 수 있습니다.&lt;/p&gt;</description></item></channel></rss>