<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Struct on 세모난 책</title><link>https://semonan.com/kr/tags/struct/</link><description>Recent content in Struct on 세모난 책</description><generator>Hugo</generator><language>ko-KR</language><lastBuildDate>Thu, 11 Jul 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://semonan.com/kr/tags/struct/rss.xml" rel="self" type="application/rss+xml"/><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>