Skip to content
Snippets Groups Projects
Commit 9ba5d407 authored by Alfex4936's avatar Alfex4936
Browse files

Fix format

parent 7a1583a7
No related branches found
No related tags found
No related merge requests found
Pipeline #5513 passed
...@@ -36,42 +36,42 @@ ...@@ -36,42 +36,42 @@
</div> </div>
<div class="page"> <div class="page">
<h1>match</h1> <h1>match</h1>
<p>Rust에서 match 키워드는 패턴 매칭을 위해 사용하고 <p>Rust에서 match 키워드는 패턴 매칭을 위해 사용하고</p>
값과 일련의 패턴을 비교할 수 있게 해줍니다. <p>값과 일련의 패턴을 비교할 수 있게 해줍니다.</p>
그리고 첫 번째 일치하는 패턴에 해당하는 코드 블록을 실행합니다. <p>그리고 첫 번째 일치하는 패턴에 해당하는 코드 블록을 실행합니다.</p>
```rust fn main() { <pre><code class="rust">fn main() {
let number = 42;</p> let number = 42;
<pre><code>match number {
0 =&gt; println!("숫자는 영입니다"), match number {
1 =&gt; println!("숫자는 일입니다"), 0 => println!("숫자는 영입니다"),
42 =&gt; println!("인생, 우주, 그리고 모든 것에 대한 답"), 1 => println!("숫자는 일입니다"),
_ =&gt; println!("숫자는 다른 것입니다"), 42 => println!("인생, 우주, 그리고 모든 것에 대한 답"),
_ => println!("숫자는 다른 것입니다"),
} }
</code></pre> } </code></pre>
<p>} <code> <p>여기서는 number 변수의 값을 여러 패턴과 비교합니다.</p>
여기서는 number 변수의 값을 여러 패턴과 비교합니다. <p><code>_</code> 패턴은 이전 패턴에서 명시적으로 다루지 않은 모든 값을 매치하는 <code>catch-all</code> 패턴입니다.</p>
`_` 패턴은 이전 패턴에서 명시적으로 다루지 않은 모든 값을 매치하는 `catch-all` 패턴입니다. <pre><code class="rust">fn classify_age(age: u8) {
</code>rust fn classify_age(age: u8) {
match age { match age {
0..=12 =&gt; println!("어린이"), 0..=12 => println!("어린이"),
13..=19 =&gt; println!("청소년"), 13..=19 => println!("청소년"),
20..=64 =&gt; println!("성인"), 20..=64 => println!("성인"),
_ =&gt; println!("노인"), _ => println!("노인"),
} }
} }
fn main() { fn main() {
let age = 25; let age = 25;
classify_age(age); classify_age(age);
} ```</p> } </code></pre>
<p>이 예제에서는 match 표현식을 사용하여 나이를 그룹으로 분류합니다. <p>이 예제에서는 match 표현식을 사용하여 나이를 그룹으로 분류하고,</p>
나이 변수와 매치하기 위해 범위를 패턴으로 사용합니다.</p> <p>나이 변수와 매치하기 위해 범위를 패턴으로 사용합니다.</p>
<div class="bottomnav"> <div class="bottomnav">
<span class="back"><a href="14_ko.html" rel="prev">❮ 이전</a></span> <span class="back"><a href="14_ko.html" rel="prev">❮ 이전</a></span>
<span class="next"><a href="16_ko.html" rel="next">다음 ❯</a></span> <span class="next"><a href="16_ko.html" rel="next">다음 ❯</a></span>
</div> </div>
</div> </div>
<div class="code"> <div class="code">
<iframe id="rust-playground" width="100%" src="https://" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe> <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20swap(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20(i32%2C%20i32)%20%7B%0A%20%20%20%20return%20(y%2C%20x)%3B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20return%20a%20tuple%20of%20return%20values%0A%20%20%20%20let%20result%20%3D%20swap(123%2C%20321)%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20result.0%2C%20result.1)%3B%0A%0A%20%20%20%20%2F%2F%20destructure%20the%20tuple%20into%20two%20variables%20names%0A%20%20%20%20let%20(a%2C%20b)%20%3D%20swap(result.0%2C%20result.1)%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20a%2C%20b)%3B%0A%7D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
</div> </div>
</div> </div>
<!-- <script> <!-- <script>
......
...@@ -36,77 +36,91 @@ ...@@ -36,77 +36,91 @@
</div> </div>
<div class="page"> <div class="page">
<h1>Struct and Enum</h1> <h1>Struct and Enum</h1>
<h2 id="struct">구조체 (Struct)</h2> <p><strong>구조체 (Struct)</strong></p>
<p>구조체는 struct 키워드를 사용하여 정의하며, 이름과 중괄호로 묶인 명명된 필드 집합이 뒤따릅니다. <p>구조체는 struct 키워드를 사용하여 정의하며, 이름과 중괄호로 묶인 명명된 필드 집합이 뒤따릅니다.</p>
다음은 Person 구조체의 예입니다: <p>다음은 Person 구조체의 예입니다:</p>
<code>rust struct Person { <pre><code class="rust">struct Person {
name: String, name: String,
age: u8, age: u8,
}</code> } </code></pre>
구조체의 인스턴스를 생성하려면, 구조체 이름 뒤에 중괄호를 사용하고 필드에 값을 할당합니다. <p>구조체의 인스턴스를 생성하려면, 구조체 이름 뒤에 중괄호를 사용하고 필드에 값을 할당합니다.
예를 들면:</p> 예를 들면:</p>
<h2 id="rustletpersonpersonnamestringfromaliceage30"><code>rust let person = Person { name: String::from("Alice"), age: 30 };</code></h2> <pre><code class="rust">let person = Person { name: String::from("Alice"), age: 30 }; </code></pre>
<h2 id="enum">열거형 (Enum)</h2> <hr />
<p>열거형(enum, "enumeration"의 줄임말)은 고정된 명명된 값 집합인 "변종(variants)"을 가진 타입을 나타냅니다. <p><strong>열거형 (Enum)</strong></p>
열거형을 정의하려면, enum 키워드를 사용하고 이름과 중괄호로 묶인 명명된 변종 집합이 뒤따릅니다. <p>열거형(enum, "enumeration"의 줄임말)은 고정된 명명된 값 집합인 "변종(variants)"을 가진 타입을 나타냅니다.</p>
다음은 Status 열거형의 예입니다: <p>열거형을 정의하려면, enum 키워드를 사용하고 이름과 중괄호로 묶인 명명된 변종 집합이 뒤따릅니다.</p>
<code>rust enum Status { <p>다음은 Status 열거형의 예입니다:</p>
<pre><code class="rust">enum Status {
Active, Active,
Inactive, Inactive,
Pending, Pending,
}</code> } </code></pre>
열거형의 인스턴스를 생성하려면, 열거형 이름 뒤에 두 개의 콜론(<code>::</code>)과 변종 이름을 사용합니다. <p>열거형의 인스턴스를 생성하려면, 열거형 이름 뒤에 두 개의 콜론(<code>::</code>)과 변종 이름을 사용합니다.</p>
예를 들면: <p>예를 들면:</p>
<code>rust let status = Status::Active;</code> <pre><code class="rust">let status = Status::Active; </code></pre>
열거형 변종에 따라 다른 작업을 수행하려면 match 표현식을 사용할 수 있습니다: <p>열거형 변종에 따라 다른 작업을 수행하려면 match 표현식을 사용할 수 있습니다:</p>
<code>rust let user_status = Status::Active;</code> <pre><code class="rust">let user_status = Status::Active; </code></pre>
열거형을 다루려면, 종종 match 표현식을 사용하며, 이를 통해 열거형 변종에 따라 다른 작업을 수행할 수 있습니다: <p>열거형을 다루려면, 종종 match 표현식을 사용하며, 이를 통해 열거형 변종에 따라 다른 작업을 수행할 수 있습니다:</p>
```rust fn print<em>status</em>message(status: Status) { <pre><code class="rust">fn print_status_message(status: Status) {
match status { match status {
Status::Active =&gt; println!("사용자가 활성 상태입니다."), Status::Active => println!("사용자가 활성 상태입니다."),
Status::Inactive =&gt; println!("사용자가 비활성 상태입니다."), Status::Inactive => println!("사용자가 비활성 상태입니다."),
Status::Pending =&gt; println!("사용자가 보류 중입니다."), Status::Pending => println!("사용자가 보류 중입니다."),
} }
} }
fn main() { fn main() {
let user<em>status = Status::Active; let user_status = Status::Active;
print</em>status<em>message(user</em>status);</p> print_status_message(user_status);
<h2 id="">} ```</h2> } </code></pre>
<h2 id="tuplestructenum">Tuple Struct, Enum</h2> <hr />
<p><strong>Tuple Struct, Enum</strong></p>
<p>주로 간결한 표현, 타입 안전성 및 논리적 구조를 위해 사용됩니다.</p> <p>주로 간결한 표현, 타입 안전성 및 논리적 구조를 위해 사용됩니다.</p>
<ul> <ul>
<li><p>튜플 구조체 (Tuple Struct): 튜플 구조체는 필드에 이름이 없는 구조체로, 간단한 데이터 구조를 표현할 때 유용합니다. 튜플 구조체를 사용하면, 구조체의 의미를 명확하게 나타낼 수 있으며, 일반 튜플보다 더 강력한 타입 안전성을 제공합니다. 예를 들어, 두 개의 float 값을 나타내는 Point2D와 Vector2D를 구별하기 위해 튜플 구조체를 사용할 수 있습니다. 이렇게 하면 코드의 가독성과 정확성이 향상됩니다. - 열거형 (Enum): 열거형은 서로 관련된 값의 집합을 표현하기 위해 사용됩니다. 열거형은 여러 변종(variants)을 가질 수 있으며, 각 변종은 고유한 타입입니다. 열거형은 논리적으로 관련된 여러 값을 그룹화하여 코드의 명확성과 구조를 개선하는 데 도움이 됩니다. 또한 열거형은 패턴 매칭을 사용하여 값에 따라 다양한 작업을 수행할 수 있어, 런타임에 오류가 발생하는 가능성이 줄어듭니다. - 튜플 열거형 변종 (Tuple Enum Variants): 튜플 열거형 변종은 열거형의 각 변종에 데이터를 연관시키는 데 사용됩니다. 튜플 열거형 변종은 각 변종에 서로 다른 타입과 수의 값을 저장할 수 있습니다. 이러한 변종은 열거형의 다양한 경우를 명확하게 구분하고, 관련 데이터를 함께 저장하여 논리적 구조를 제공하는 데 유용합니다. 패턴 매칭을 사용하면 튜플 열거형 변종의 값을 안전하게 추출하고, 해당 값에 따라 다양한 작업을 수행할 수 있습니다. <li>튜플 구조체 (Tuple Struct): 튜플 구조체는 필드에 이름이 없는 구조체로, 간단한 데이터 구조를 표현할 때 유용합니다. 튜플 구조체를 사용하면, 구조체의 의미를 명확하게 나타낼 수 있으며, 일반 튜플보다 더 강력한 타입 안전성을 제공합니다. 예를 들어, 두 개의 float 값을 나타내는 Point2D와 Vector2D를 구별하기 위해 튜플 구조체를 사용할 수 있습니다. 이렇게 하면 코드의 가독성과 정확성이 향상됩니다.</li>
```rust // 튜플 구조체 (Tuple Struct) struct Point3D(f32, f32, f32); <li>열거형 (Enum): 열거형은 서로 관련된 값의 집합을 표현하기 위해 사용됩니다. 열거형은 여러 변종(variants)을 가질 수 있으며, 각 변종은 고유한 타입입니다. 열거형은 논리적으로 관련된 여러 값을 그룹화하여 코드의 명확성과 구조를 개선하는 데 도움이 됩니다. 또한 열거형은 패턴 매칭을 사용하여 값에 따라 다양한 작업을 수행할 수 있어, 런타임에 오류가 발생하는 가능성이 줄어듭니다.</li>
// 열거형에 튜플 변종 (Tuple Enum Variant) 포함 enum Shape { <li>튜플 열거형 변종 (Tuple Enum Variants): 튜플 열거형 변종은 열거형의 각 변종에 데이터를 연관시키는 데 사용됩니다. 튜플 열거형 변종은 각 변종에 서로 다른 타입과 수의 값을 저장할 수 있습니다. 이러한 변종은 열거형의 다양한 경우를 명확하게 구분하고, 관련 데이터를 함께 저장하여 논리적 구조를 제공하는 데 유용합니다. 패턴 매칭을 사용하면 튜플 열거형 변종의 값을 안전하게 추출하고, 해당 값에 따라 다양한 작업을 수행할 수 있습니다.</li>
</ul>
<pre><code class="rust">// 튜플 구조체 (Tuple Struct)
struct Point3D(f32, f32, f32);
// 열거형에 튜플 변종 (Tuple Enum Variant) 포함
enum Shape {
Circle(f32), Circle(f32),
Rectangle(f32, f32), Rectangle(f32, f32),
} }
fn main() { fn main() {
let point = Point3D(1.0, 2.0, 3.0); let point = Point3D(1.0, 2.0, 3.0);
let circle = Shape::Circle(5.0); let circle = Shape::Circle(5.0);
let rectangle = Shape::Rectangle(4.0, 6.0);</p> let rectangle = Shape::Rectangle(4.0, 6.0);
<p>// 튜플 구조체의 값에 접근
// 튜플 구조체의 값에 접근
println!("x 좌표: {}", point.0); println!("x 좌표: {}", point.0);
println!("y 좌표: {}", point.1); println!("y 좌표: {}", point.1);
println!("z 좌표: {}", point.2);</p> println!("z 좌표: {}", point.2);
<p>// 튜플 열거형 변종의 값에 접근
// 튜플 열거형 변종의 값에 접근
match circle { match circle {
Shape::Circle(radius) =&gt; println!("원의 반지름: {}", radius), Shape::Circle(radius) => println!("원의 반지름: {}", radius),
_ =&gt; (), _ => (),
}</p></li> }
</ul> } </code></pre>
<h2 id="-1">} ```</h2> <hr />
<h2 id="nested">Nested</h2> <p><strong>Nested</strong>
<p>중첩된 Struct과 Enum을 만들고 싶다면? 중첩된 Struct과 Enum을 만들고 싶다면?</p>
<code>rust // 중첩된 구조체 (Nested Struct) struct Address { <pre><code class="rust">// 중첩된 구조체 (Nested Struct)
struct Address {
street: String, street: String,
city: String, city: String,
} }
struct Person { struct Person {
name: String, name: String,
address: Address, address: Address,
} }
// 중첩된 열거형 (Nested Enum) enum Animal { // 중첩된 열거형 (Nested Enum)
enum Animal {
Mammal { Mammal {
species: String, species: String,
is_domestic: bool, is_domestic: bool,
...@@ -116,6 +130,7 @@ struct Person { ...@@ -116,6 +130,7 @@ struct Person {
is_poisonous: bool, is_poisonous: bool,
}, },
} }
fn main() { fn main() {
let person = Person { let person = Person {
name: String::from("지훈"), name: String::from("지훈"),
...@@ -128,7 +143,7 @@ fn main() { ...@@ -128,7 +143,7 @@ fn main() {
species: String::from("개"), species: String::from("개"),
is_domestic: true, is_domestic: true,
}; };
}</code></p> } </code></pre>
<div class="bottomnav"> <div class="bottomnav">
<span class="back"><a href="15_ko.html" rel="prev">❮ 이전</a></span> <span class="back"><a href="15_ko.html" rel="prev">❮ 이전</a></span>
<span class="next"><a href="17_ko.html" rel="next">다음 ❯</a></span> <span class="next"><a href="17_ko.html" rel="next">다음 ❯</a></span>
......
...@@ -90,6 +90,7 @@ code { ...@@ -90,6 +90,7 @@ code {
} }
h1, h1,
h2,
p, p,
pre { pre {
margin-left: 40px; margin-left: 40px;
......
...@@ -199,16 +199,18 @@ ...@@ -199,16 +199,18 @@
우리는 더 많은 형태로 볼 것이며, 이를 통해 데이터 구조의 하위 요소를 직관적으로 추출할 수 있습니다. 우리는 더 많은 형태로 볼 것이며, 이를 통해 데이터 구조의 하위 요소를 직관적으로 추출할 수 있습니다.
- title: match - title: match
code: >- code: >-
https:// https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20swap(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20(i32%2C%20i32)%20%7B%0A%20%20%20%20return%20(y%2C%20x)%3B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20%2F%2F%20return%20a%20tuple%20of%20return%20values%0A%20%20%20%20let%20result%20%3D%20swap(123%2C%20321)%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20result.0%2C%20result.1)%3B%0A%0A%20%20%20%20%2F%2F%20destructure%20the%20tuple%20into%20two%20variables%20names%0A%20%20%20%20let%20(a%2C%20b)%20%3D%20swap(result.0%2C%20result.1)%3B%0A%20%20%20%20println!(%22%7B%7D%20%7B%7D%22%2C%20a%2C%20b)%3B%0A%7D%0A
content_markdown: > content_markdown: >
Rust에서 match 키워드는 패턴 매칭을 위해 사용하고 Rust에서 match 키워드는 패턴 매칭을 위해 사용하고
값과 일련의 패턴을 비교할 수 있게 해줍니다. 값과 일련의 패턴을 비교할 수 있게 해줍니다.
그리고 첫 번째 일치하는 패턴에 해당하는 코드 블록을 실행합니다. 그리고 첫 번째 일치하는 패턴에 해당하는 코드 블록을 실행합니다.
```rust
fn main() { <pre><code class="rust">fn main() {
let number = 42; let number = 42;
match number { match number {
...@@ -218,14 +220,15 @@ ...@@ -218,14 +220,15 @@
_ => println!("숫자는 다른 것입니다"), _ => println!("숫자는 다른 것입니다"),
} }
} }
``` </code></pre>
여기서는 number 변수의 값을 여러 패턴과 비교합니다. 여기서는 number 변수의 값을 여러 패턴과 비교합니다.
`_` 패턴은 이전 패턴에서 명시적으로 다루지 않은 모든 값을 매치하는 `catch-all` 패턴입니다. `_` 패턴은 이전 패턴에서 명시적으로 다루지 않은 모든 값을 매치하는 `catch-all` 패턴입니다.
```rust
fn classify_age(age: u8) { <pre><code class="rust">fn classify_age(age: u8) {
match age { match age {
0..=12 => println!("어린이"), 0..=12 => println!("어린이"),
13..=19 => println!("청소년"), 13..=19 => println!("청소년"),
...@@ -238,75 +241,75 @@ ...@@ -238,75 +241,75 @@
let age = 25; let age = 25;
classify_age(age); classify_age(age);
} }
``` </code></pre>
이 예제에서는 match 표현식을 사용하여 나이를 그룹으로 분류합니다. 이 예제에서는 match 표현식을 사용하여 나이를 그룹으로 분류하고,
나이 변수와 매치하기 위해 범위를 패턴으로 사용합니다. 나이 변수와 매치하기 위해 범위를 패턴으로 사용합니다.
- title: Struct and Enum - title: Struct and Enum
code: >- code: >-
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%ED%8A%B9%EC%84%B1+%28Trait%29+%EC%A0%95%EC%9D%98%0D%0Atrait+Greet+%7B%0D%0A++++fn+greet%28%26self%29+-%3E+String%3B%0D%0A%7D%0D%0A%0D%0A%2F%2F+%EA%B5%AC%EC%A1%B0%EC%B2%B4+%28Struct%29+%EC%A0%95%EC%9D%98%0D%0Astruct+Person+%7B%0D%0A++++name%3A+String%2C%0D%0A%7D%0D%0A%0D%0A%2F%2F+%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%97%90+%EB%8C%80%ED%95%9C+%ED%8A%B9%EC%84%B1+%EA%B5%AC%ED%98%84%0D%0Aimpl+Greet+for+Person+%7B%0D%0A++++fn+greet%28%26self%29+-%3E+String+%7B%0D%0A++++++++format%21%28%22%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94%2C+%7B%7D%EB%8B%98%21%22%2C+self.name%29%0D%0A++++%7D%0D%0A%7D%0D%0A%0D%0A%2F%2F+%EC%97%B4%EA%B1%B0%ED%98%95+%28Enum%29+%EC%A0%95%EC%9D%98%0D%0Aenum+Animal+%7B%0D%0A++++Dog%2C%0D%0A++++Cat%2C%0D%0A%7D%0D%0A%0D%0A%2F%2F+%EC%97%B4%EA%B1%B0%ED%98%95%EC%97%90+%EB%8C%80%ED%95%9C+%ED%8A%B9%EC%84%B1+%EA%B5%AC%ED%98%84%0D%0Aimpl+Greet+for+Animal+%7B%0D%0A++++fn+greet%28%26self%29+-%3E+String+%7B%0D%0A++++++++match+self+%7B%0D%0A++++++++++++Animal%3A%3ADog+%3D%3E+String%3A%3Afrom%28%22%EB%A9%8D%EB%A9%8D%21%22%29%2C%0D%0A++++++++++++Animal%3A%3ACat+%3D%3E+String%3A%3Afrom%28%22%EC%95%BC%EC%98%B9%7E%22%29%2C%0D%0A++++++++%7D%0D%0A++++%7D%0D%0A%7D%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++let+person+%3D+Person+%7B%0D%0A++++++++name%3A+String%3A%3Afrom%28%22%EA%B9%80%EC%95%84%EC%A3%BC%22%29%2C%0D%0A++++%7D%3B%0D%0A++++let+dog+%3D+Animal%3A%3ADog%3B%0D%0A%0D%0A++++%2F%2F+%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%99%80+%EC%97%B4%EA%B1%B0%ED%98%95+%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90+greet+%EB%A9%94%EC%84%9C%EB%93%9C+%EC%82%AC%EC%9A%A9%0D%0A++++println%21%28%22%7B%7D%22%2C+person.greet%28%29%29%3B%0D%0A++++println%21%28%22%7B%7D%22%2C+dog.greet%28%29%29%3B%0D%0A%7D%0D%0A https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%ED%8A%B9%EC%84%B1+%28Trait%29+%EC%A0%95%EC%9D%98%0D%0Atrait+Greet+%7B%0D%0A++++fn+greet%28%26self%29+-%3E+String%3B%0D%0A%7D%0D%0A%0D%0A%2F%2F+%EA%B5%AC%EC%A1%B0%EC%B2%B4+%28Struct%29+%EC%A0%95%EC%9D%98%0D%0Astruct+Person+%7B%0D%0A++++name%3A+String%2C%0D%0A%7D%0D%0A%0D%0A%2F%2F+%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%97%90+%EB%8C%80%ED%95%9C+%ED%8A%B9%EC%84%B1+%EA%B5%AC%ED%98%84%0D%0Aimpl+Greet+for+Person+%7B%0D%0A++++fn+greet%28%26self%29+-%3E+String+%7B%0D%0A++++++++format%21%28%22%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94%2C+%7B%7D%EB%8B%98%21%22%2C+self.name%29%0D%0A++++%7D%0D%0A%7D%0D%0A%0D%0A%2F%2F+%EC%97%B4%EA%B1%B0%ED%98%95+%28Enum%29+%EC%A0%95%EC%9D%98%0D%0Aenum+Animal+%7B%0D%0A++++Dog%2C%0D%0A++++Cat%2C%0D%0A%7D%0D%0A%0D%0A%2F%2F+%EC%97%B4%EA%B1%B0%ED%98%95%EC%97%90+%EB%8C%80%ED%95%9C+%ED%8A%B9%EC%84%B1+%EA%B5%AC%ED%98%84%0D%0Aimpl+Greet+for+Animal+%7B%0D%0A++++fn+greet%28%26self%29+-%3E+String+%7B%0D%0A++++++++match+self+%7B%0D%0A++++++++++++Animal%3A%3ADog+%3D%3E+String%3A%3Afrom%28%22%EB%A9%8D%EB%A9%8D%21%22%29%2C%0D%0A++++++++++++Animal%3A%3ACat+%3D%3E+String%3A%3Afrom%28%22%EC%95%BC%EC%98%B9%7E%22%29%2C%0D%0A++++++++%7D%0D%0A++++%7D%0D%0A%7D%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++let+person+%3D+Person+%7B%0D%0A++++++++name%3A+String%3A%3Afrom%28%22%EA%B9%80%EC%95%84%EC%A3%BC%22%29%2C%0D%0A++++%7D%3B%0D%0A++++let+dog+%3D+Animal%3A%3ADog%3B%0D%0A%0D%0A++++%2F%2F+%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%99%80+%EC%97%B4%EA%B1%B0%ED%98%95+%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EC%97%90+greet+%EB%A9%94%EC%84%9C%EB%93%9C+%EC%82%AC%EC%9A%A9%0D%0A++++println%21%28%22%7B%7D%22%2C+person.greet%28%29%29%3B%0D%0A++++println%21%28%22%7B%7D%22%2C+dog.greet%28%29%29%3B%0D%0A%7D%0D%0A
content_markdown: > content_markdown: >
## 구조체 (Struct) **구조체 (Struct)**
구조체는 struct 키워드를 사용하여 정의하며, 이름과 중괄호로 묶인 명명된 필드 집합이 뒤따릅니다. 구조체는 struct 키워드를 사용하여 정의하며, 이름과 중괄호로 묶인 명명된 필드 집합이 뒤따릅니다.
다음은 Person 구조체의 예입니다: 다음은 Person 구조체의 예입니다:
```rust <pre><code class="rust">struct Person {
struct Person {
name: String, name: String,
age: u8, age: u8,
} }
``` </code></pre>
구조체의 인스턴스를 생성하려면, 구조체 이름 뒤에 중괄호를 사용하고 필드에 값을 할당합니다. 구조체의 인스턴스를 생성하려면, 구조체 이름 뒤에 중괄호를 사용하고 필드에 값을 할당합니다.
예를 들면: 예를 들면:
```rust <pre><code class="rust">let person = Person { name: String::from("Alice"), age: 30 };
let person = Person { name: String::from("Alice"), age: 30 }; </code></pre>
```
--- ---
## 열거형 (Enum) **열거형 (Enum)**
열거형(enum, "enumeration"의 줄임말)은 고정된 명명된 값 집합인 "변종(variants)"을 가진 타입을 나타냅니다. 열거형(enum, "enumeration"의 줄임말)은 고정된 명명된 값 집합인 "변종(variants)"을 가진 타입을 나타냅니다.
열거형을 정의하려면, enum 키워드를 사용하고 이름과 중괄호로 묶인 명명된 변종 집합이 뒤따릅니다. 열거형을 정의하려면, enum 키워드를 사용하고 이름과 중괄호로 묶인 명명된 변종 집합이 뒤따릅니다.
다음은 Status 열거형의 예입니다: 다음은 Status 열거형의 예입니다:
```rust <pre><code class="rust">enum Status {
enum Status {
Active, Active,
Inactive, Inactive,
Pending, Pending,
} }
``` </code></pre>
열거형의 인스턴스를 생성하려면, 열거형 이름 뒤에 두 개의 콜론(`::`)과 변종 이름을 사용합니다. 열거형의 인스턴스를 생성하려면, 열거형 이름 뒤에 두 개의 콜론(`::`)과 변종 이름을 사용합니다.
예를 들면: 예를 들면:
```rust <pre><code class="rust">let status = Status::Active;
let status = Status::Active; </code></pre>
```
열거형 변종에 따라 다른 작업을 수행하려면 match 표현식을 사용할 수 있습니다: 열거형 변종에 따라 다른 작업을 수행하려면 match 표현식을 사용할 수 있습니다:
```rust <pre><code class="rust">let user_status = Status::Active;
let user_status = Status::Active; </code></pre>
```
열거형을 다루려면, 종종 match 표현식을 사용하며, 이를 통해 열거형 변종에 따라 다른 작업을 수행할 수 있습니다: 열거형을 다루려면, 종종 match 표현식을 사용하며, 이를 통해 열거형 변종에 따라 다른 작업을 수행할 수 있습니다:
```rust <pre><code class="rust">fn print_status_message(status: Status) {
fn print_status_message(status: Status) {
match status { match status {
Status::Active => println!("사용자가 활성 상태입니다."), Status::Active => println!("사용자가 활성 상태입니다."),
Status::Inactive => println!("사용자가 비활성 상태입니다."), Status::Inactive => println!("사용자가 비활성 상태입니다."),
...@@ -318,29 +321,35 @@ ...@@ -318,29 +321,35 @@
let user_status = Status::Active; let user_status = Status::Active;
print_status_message(user_status); print_status_message(user_status);
} }
``` </code></pre>
--- ---
## Tuple Struct, Enum **Tuple Struct, Enum**
주로 간결한 표현, 타입 안전성 및 논리적 구조를 위해 사용됩니다. 주로 간결한 표현, 타입 안전성 및 논리적 구조를 위해 사용됩니다.
- 튜플 구조체 (Tuple Struct): 튜플 구조체는 필드에 이름이 없는 구조체로, 간단한 데이터 구조를 표현할 때 유용합니다. 튜플 구조체를 사용하면, 구조체의 의미를 명확하게 나타낼 수 있으며, 일반 튜플보다 더 강력한 타입 안전성을 제공합니다. 예를 들어, 두 개의 float 값을 나타내는 Point2D와 Vector2D를 구별하기 위해 튜플 구조체를 사용할 수 있습니다. 이렇게 하면 코드의 가독성과 정확성이 향상됩니다. - 튜플 구조체 (Tuple Struct): 튜플 구조체는 필드에 이름이 없는 구조체로, 간단한 데이터 구조를 표현할 때 유용합니다. 튜플 구조체를 사용하면, 구조체의 의미를 명확하게 나타낼 수 있으며, 일반 튜플보다 더 강력한 타입 안전성을 제공합니다. 예를 들어, 두 개의 float 값을 나타내는 Point2D와 Vector2D를 구별하기 위해 튜플 구조체를 사용할 수 있습니다. 이렇게 하면 코드의 가독성과 정확성이 향상됩니다.
- 열거형 (Enum): 열거형은 서로 관련된 값의 집합을 표현하기 위해 사용됩니다. 열거형은 여러 변종(variants)을 가질 수 있으며, 각 변종은 고유한 타입입니다. 열거형은 논리적으로 관련된 여러 값을 그룹화하여 코드의 명확성과 구조를 개선하는 데 도움이 됩니다. 또한 열거형은 패턴 매칭을 사용하여 값에 따라 다양한 작업을 수행할 수 있어, 런타임에 오류가 발생하는 가능성이 줄어듭니다. - 열거형 (Enum): 열거형은 서로 관련된 값의 집합을 표현하기 위해 사용됩니다. 열거형은 여러 변종(variants)을 가질 수 있으며, 각 변종은 고유한 타입입니다. 열거형은 논리적으로 관련된 여러 값을 그룹화하여 코드의 명확성과 구조를 개선하는 데 도움이 됩니다. 또한 열거형은 패턴 매칭을 사용하여 값에 따라 다양한 작업을 수행할 수 있어, 런타임에 오류가 발생하는 가능성이 줄어듭니다.
- 튜플 열거형 변종 (Tuple Enum Variants): 튜플 열거형 변종은 열거형의 각 변종에 데이터를 연관시키는 데 사용됩니다. 튜플 열거형 변종은 각 변종에 서로 다른 타입과 수의 값을 저장할 수 있습니다. 이러한 변종은 열거형의 다양한 경우를 명확하게 구분하고, 관련 데이터를 함께 저장하여 논리적 구조를 제공하는 데 유용합니다. 패턴 매칭을 사용하면 튜플 열거형 변종의 값을 안전하게 추출하고, 해당 값에 따라 다양한 작업을 수행할 수 있습니다. - 튜플 열거형 변종 (Tuple Enum Variants): 튜플 열거형 변종은 열거형의 각 변종에 데이터를 연관시키는 데 사용됩니다. 튜플 열거형 변종은 각 변종에 서로 다른 타입과 수의 값을 저장할 수 있습니다. 이러한 변종은 열거형의 다양한 경우를 명확하게 구분하고, 관련 데이터를 함께 저장하여 논리적 구조를 제공하는 데 유용합니다. 패턴 매칭을 사용하면 튜플 열거형 변종의 값을 안전하게 추출하고, 해당 값에 따라 다양한 작업을 수행할 수 있습니다.
```rust <pre><code class="rust">// 튜플 구조체 (Tuple Struct)
// 튜플 구조체 (Tuple Struct)
struct Point3D(f32, f32, f32); struct Point3D(f32, f32, f32);
// 열거형에 튜플 변종 (Tuple Enum Variant) 포함 // 열거형에 튜플 변종 (Tuple Enum Variant) 포함
enum Shape { enum Shape {
Circle(f32), Circle(f32),
Rectangle(f32, f32), Rectangle(f32, f32),
} }
fn main() { fn main() {
let point = Point3D(1.0, 2.0, 3.0); let point = Point3D(1.0, 2.0, 3.0);
let circle = Shape::Circle(5.0); let circle = Shape::Circle(5.0);
...@@ -357,27 +366,29 @@ ...@@ -357,27 +366,29 @@
_ => (), _ => (),
} }
} }
``` </code></pre>
--- ---
## Nested **Nested**
중첩된 Struct과 Enum을 만들고 싶다면? 중첩된 Struct과 Enum을 만들고 싶다면?
```rust <pre><code class="rust">// 중첩된 구조체 (Nested Struct)
// 중첩된 구조체 (Nested Struct)
struct Address { struct Address {
street: String, street: String,
city: String, city: String,
} }
struct Person { struct Person {
name: String, name: String,
address: Address, address: Address,
} }
// 중첩된 열거형 (Nested Enum) // 중첩된 열거형 (Nested Enum)
enum Animal { enum Animal {
Mammal { Mammal {
species: String, species: String,
...@@ -389,6 +400,7 @@ ...@@ -389,6 +400,7 @@
}, },
} }
fn main() { fn main() {
let person = Person { let person = Person {
name: String::from("지훈"), name: String::from("지훈"),
...@@ -402,7 +414,7 @@ ...@@ -402,7 +414,7 @@
is_domestic: true, is_domestic: true,
}; };
} }
``` </code></pre>
- title: Returning Nothing - title: Returning Nothing
code: >- code: >-
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment