diff --git a/docs/01_ko.html b/docs/01_ko.html index 43c71570c51cfe9e5c1633bbc9ca6f0bb7b337d8..82b45b27ea1c88885bd44b3b0b781ae17ca32cd2 100644 --- a/docs/01_ko.html +++ b/docs/01_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> diff --git a/docs/02_ko.html b/docs/02_ko.html index f1b8447135b15551ee57baafda82f8aef90fb92b..e4a92b45ec2d74d8b5f7c7a68c27fe5c67486f06 100644 --- a/docs/02_ko.html +++ b/docs/02_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -59,20 +59,6 @@ </p> </div> <p>이제 Rust 팬처럼만 이야기 하지 말고 Rust 언어가 전체적으로 어떻게 작동하는지 자세히 알아보겠습니다.</p> -<hr /> -<p><code>Rust</code>는 메모리 안정성, 스레드 안전성, 코드 가독성 등을 강조하는 언어입니다.</p> -<p><code>가비지 컬렉션이나 런타임 오버헤드 없이</code> 메모리를 안전하게 보호할 수 있어 최신 컴퓨팅에서 매우 유용합니다.</p> -<p>이러한 기능 덕분에 Rust는 빠르고 안정적이며 효율적인 소프트웨어를 작성하는 데 완벽한 언어입니다.</p> -<p>객체 지향 프로그래밍을 지원하지만, 이를 구현하는 방식이 다릅니다.</p> -<p>"트레잇(trait)"이라는 개념을 사용하여 <code>객체 지향 프로그래밍</code>을 구현하고 <code>연산자 오버로딩을 지원</code>하며, 이를 통해 객체 지향적인 코드를 작성할 수 있습니다.</p> -<p><code>암묵적인 타입 변환</code>을 지원하지 않습니다. Rust에서는 <code>C와 직접적으로 상호작용</code>할 수 있는 Foreign Function Interface(FFI)가 제공됩니다.</p> -<p>Rust는 LLVM(컴파일러 인프라스트럭처) 프로젝트의 일부로 개발되어 <code>LLVM</code>을 사용하여 코드를 컴파일하고 최적화하여 빠른 실행 속도를 제공합니다.</p> -<p>Rust는 또한 npm처럼 <code>패키지 매니저 Cargo</code>를 내장해 의존성 관리와 빌드 자동화를 지원합니다.</p> -<div align="center"> -<p> - <img src="https://doc.rust-lang.org/cargo/images/Cargo-Logo-Small.png"> -</p> -</div> <div class="bottomnav"> <span class="back"><a href="01_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="03_ko.html" rel="next">다음 ❯</a></span> diff --git a/docs/03_ko.html b/docs/03_ko.html index 2f020836509fa1b0ea8d2bae92bc1972dde69e90..c186122a78a16ee09efaec79dcf03e1d85bb571b 100644 --- a/docs/03_ko.html +++ b/docs/03_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,21 +35,25 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Rust 언어 설치</h1> - <p><a href="https://rustup.rs/" target="_blank" rel="noopener">https://rustup.rs/</a></p> -<p><a href="https://visualstudio.microsoft.com/ko/visual-cpp-build-tools/" target="_blank" rel="noopener"><code>Microsoft C++ Build Tools</code></a></p> -<p><a href="https://www.rust-lang.org/tools/install" target="_blank" rel="noopener">@Rust lang Link</a></p> -<p><a href="https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe" target="_blank" rel="noopener">@DOWNLOAD RUSTUP-INIT.EXE (64-BIT)</a></p> -<p><a href="https://static.rust-lang.org/rustup/dist/i686-pc-windows-msvc/rustup-init.exe" target="_blank" rel="noopener">@DOWNLOAD RUSTUP-INIT.EXE (32-BIT)</a></p> -<pre><code class="bash">curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh</code></pre> + <h1>Rust 언어 소개 cont'd 2</h1> + <p>Rust는 메모리 안정성, 스레드 안전성, 그리고 코드 가독성을 중요하게 생각하는 프로그래밍 언어입니다.</p> +<p><code>가비지 컬렉션</code>(GC, 예를 들어 Java ZGC)이나 런타임 오버헤드 없이 메모리를 안전하게 관리할 수 있는 기능을 제공하며,</p> +<p>이로 인해 최신 컴퓨팅 환경에서 매우 유용한 언어로 각광받고 있습니다.</p> +<p>Rust의 고유한 메모리 관리 방식 덕분에 빠르고, 안정적이며, 효율적인 소프트웨어를 작성할 수 있습니다.</p> +<p>Rust는 <code>객체 지향</code> 프로그래밍을 지원하지만, 전통적인 객체 지향 언어와는 다른 방식으로 구현합니다.</p> +<p>Rust는 <code>"트레잇(trait)"</code>이라는 개념을 도입하여 객체 지향 프로그래밍의 특징을 제공하고 있습니다.</p> +<p>트레잇을 통해 다형성을 구현할 수 있으며, 연산자 오버로딩을 지원하여 객체 지향적인 코드를 작성할 수 있습니다.</p> +<p>암묵적인 타입 변환은 지원하지 않아, 코드의 안정성과 명확성을 높입니다.</p> +<p>또한, Rust는 C와 같은 다른 언어와 직접적으로 상호작용할 수 있는</p> +<p>Foreign Function Interface(<code>FFI</code>)를 제공하여, 다양한 언어와의 호환성을 높입니다.</p> +<p>Rust는 <code>LLVM</code> 컴파일러 인프라스트럭처 프로젝트와 연계되어 개발되었습니다.</p> +<p>LLVM을 사용하여 코드를 컴파일하고 최적화하므로, 빠른 실행 속도를 보장할 수 있습니다.</p> +<p>더불어, Rust는 npm과 같은 <code>패키지 매니저</code>인 Cargo를 내장하여 의존성 관리와 빌드 자동화를 지원합니다.</p> +<p>Cargo를 통해 다른 개발자들이 작성한 Rust 라이브러리를 쉽게 사용하고 관리할 수 있습니다.</p> +<p>이처럼 Rust의 특징들을 이해하고 활용하면, 다양한 상황에서 안전하고 효율적인 소프트웨어 개발이 가능해집니다.</p> <div align="center"> <p> - <img src="https://user-images.githubusercontent.com/2356749/223654372-637cbfd5-06f3-4c20-b97c-aefcdbbdafe6.png"> -</p> -</div> -<div align="center"> -<p> - <img src="https://user-images.githubusercontent.com/2356749/223654483-ba1db2fa-cc6b-4104-93ca-456852d2b4e5.png"> + <img src="https://doc.rust-lang.org/cargo/images/Cargo-Logo-Small.png"> </p> </div> <div class="bottomnav"> @@ -58,7 +62,7 @@ </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=curl%20--proto%20'%3Dhttps'%20--tlsv1.2%20-sSf%20https%3A%2F%2Fsh.rustup.rs%20%7C%20sh" 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=2021&code=%2F%2F+%EC%99%B8%EB%B6%80+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4.%0D%0Aextern+crate+image%3B%0D%0A%0D%0A%2F%2F+%ED%95%84%EC%9A%94%ED%95%9C+%EB%AA%A8%EB%93%88%EC%9D%84+%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4.%0D%0Ause+image%3A%3A%7BGenericImageView%2C+ImageFormat%2C+ImageOutputFormat%7D%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EC%9D%B4%EB%AF%B8%EC%A7%80+%ED%8C%8C%EC%9D%BC%EC%9D%84+%EC%97%BD%EB%8B%88%EB%8B%A4.%0D%0A++++let+img+%3D+image%3A%3Aopen%28%22input.jpg%22%29.unwrap%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%9D%98+%ED%81%AC%EA%B8%B0%EB%A5%BC+%EB%B3%80%EA%B2%BD%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++let+resized_img+%3D+img.resize%28100%2C+100%2C+image%3A%3Aimageops%3A%3AFilterType%3A%3ANearest%29%3B%0D%0A%0D%0A++++%2F%2F+%EC%83%88+%EC%9D%B4%EB%AF%B8%EC%A7%80+%ED%8C%8C%EC%9D%BC%EC%9D%84+%EC%A0%80%EC%9E%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++let+mut+output+%3D+std%3A%3Afs%3A%3AFile%3A%3Acreate%28%22output.jpg%22%29.unwrap%28%29%3B%0D%0A++++resized_img%0D%0A++++++++.write_to%28%26mut+output%2C+ImageOutputFormat%3A%3AJpeg%2875%29%29%0D%0A++++++++.unwrap%28%29%3B%0D%0A%0D%0A++++println%21%28%22%EC%9D%B4%EB%AF%B8%EC%A7%80+%ED%81%AC%EA%B8%B0+%EB%B3%80%EA%B2%BD%EC%9D%B4+%EC%99%84%EB%A3%8C%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22%29%3B%0D%0A%7D%0D%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> <!-- <script> diff --git a/docs/04_ko.html b/docs/04_ko.html index e277dd6791440fd2c4482d53240f720711fac1c3..097556ba5b336591d0284f8a35767eb62a39929b 100644 --- a/docs/04_ko.html +++ b/docs/04_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,26 +35,31 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Chapter 0 - 마무리</h1> - <p>Rust 소스코드는 <code>.rs</code> 확장자를 가집니다.</p> -<pre><code class="rust language-rust">fn main() { - println!("Hello, world!"); -} -</code></pre> -<p>위 코드는 가장 간단한 Rust 프로그램입니다.</p> -<p>main 함수를 정의하고, println! 매크로를 사용하여 "Hello, world!"를 출력하도록 되어 있습니다.</p> -<p>위 코드를 hello.rs라는 이름으로 저장한 뒤, 터미널에서 다음과 같은 명령어를 입력해보세요.</p> -<pre><code class="bash language-bash">$ rustc hello.rs -$ ./hello -$ Hello, world! (stdout) -</code></pre> -<p><code>Google evcxr</code> - <a href="https://github.com/evcxr/evcxr" target="_blank" rel="noopener">Rust REPL</a></p> + <h1>Rust 언어 설치</h1> + <p><a href="https://rustup.rs/" target="_blank" rel="noopener">https://rustup.rs/</a></p> +<p><a href="https://visualstudio.microsoft.com/ko/visual-cpp-build-tools/" target="_blank" rel="noopener"><code>Microsoft C++ Build Tools</code></a></p> +<p><a href="https://www.rust-lang.org/tools/install" target="_blank" rel="noopener">@Rust lang Link</a></p> +<p><a href="https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe" target="_blank" rel="noopener">@DOWNLOAD RUSTUP-INIT.EXE (64-BIT)</a></p> +<p><a href="https://static.rust-lang.org/rustup/dist/i686-pc-windows-msvc/rustup-init.exe" target="_blank" rel="noopener">@DOWNLOAD RUSTUP-INIT.EXE (32-BIT)</a></p> +<pre><code class="bash">curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh</code></pre> +<div align="center"> +<p> + <img src="https://user-images.githubusercontent.com/2356749/223654372-637cbfd5-06f3-4c20-b97c-aefcdbbdafe6.png"> +</p> +</div> +<div align="center"> +<p> + <img src="https://user-images.githubusercontent.com/2356749/223654483-ba1db2fa-cc6b-4104-93ca-456852d2b4e5.png"> +</p> +</div> <div class="bottomnav"> <span class="back"><a href="03_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="chapter_1_ko.html" rel="next">다음 ❯</a></span> + <span class="next"><a href="05_ko.html" rel="next">다음 ❯</a></span> </div> </div> - <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> + <div class="code"> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=curl%20--proto%20'%3Dhttps'%20--tlsv1.2%20-sSf%20https%3A%2F%2Fsh.rustup.rs%20%7C%20sh" 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> <!-- <script> document.addEventListener("DOMContentLoaded", function() { diff --git a/docs/05_ko.html b/docs/05_ko.html new file mode 100644 index 0000000000000000000000000000000000000000..28e9d3c18a426e4cfcf4e42e68819930d92db927 --- /dev/null +++ b/docs/05_ko.html @@ -0,0 +1,88 @@ +<!DOCTYPE html> + <html lang="ko"> + <head> + <title>Rust 튜토리얼 - 자기주도프로젝트</title> + + <meta charset="UTF-8"> + <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> + <meta content="utf-8" http-equiv="encoding"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> + <meta name="keywords" content="Rust, Programming, Learning"> + <meta name="description" content="Rust tutorial website based on tour_of_rust"> + <meta name="theme-color" content="#ff6801"/> + <meta http-equiv="Cache-Control" content="max-age=3600"> + + <link rel="stylesheet" href="tour.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/night-owl.min.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css"> + + <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> + <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> + <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> + <link rel="/manifest" href="./site.webmanifest"> + + <script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script> + + <script src="./tour.js" defer></script> + <!-- <script>hljs.highlightAll();</script> --> + <script src="./highlight.badge.min.js"></script> + </head> + <body> + <div class="tour"> + <div class="header"> + <span class="title"><a href="index.html">Rust 튜토리얼</a></span> + <span class="nav"> + <span class="toc"><a href="TOC_ko.html">목차</a></span> + </div> + <div class="page"> + <h1>Chapter 0 - 마무리</h1> + <p>Rust 소스코드는 <code>.rs</code> 확장자를 가집니다.</p> +<pre><code class="rust language-rust">fn main() { + println!("Hello, world!"); +} +</code></pre> +<p>위 코드는 가장 간단한 Rust 프로그램입니다.</p> +<p>main 함수를 정의하고, println! 매크로를 사용하여 "Hello, world!"를 출력하도록 되어 있습니다.</p> +<p>위 코드를 hello.rs라는 이름으로 저장한 뒤, 터미널에서 다음과 같은 명령어를 입력해보세요.</p> +<pre><code class="bash language-bash">$ rustc hello.rs +$ ./hello +$ Hello, world! (stdout) +</code></pre> +<p><code>Google evcxr</code> - <a href="https://github.com/evcxr/evcxr" target="_blank" rel="noopener">Rust REPL</a></p> + <div class="bottomnav"> + <span class="back"><a href="04_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="chapter_1_ko.html" rel="next">다음 ❯</a></span> + </div> + </div> + <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> + </div> + <!-- <script> + document.addEventListener("DOMContentLoaded", function() { + // Select the widget's text element using its XPath + const xpath = '/html/body/main/div/div/div[1]/div[1]/div/button[1]/div'; + const widgetText = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + + // Change the text content of the element + widgetText.textContent = "New Text"; + }); + </script> --> + + <script> + var pres = document.querySelectorAll("pre>code"); + for (var i = 0; i < pres.length; i++) { + hljs.highlightElement(pres[i]); + } + var options = { + loadDelay: 0, + copyIconClass: "far fa-clipboard", + checkIconClass: "fa fa-check text-success", + blogURL: "http://rust-study.ajousw.kr/" + }; + window.highlightJsBadge(options); + </script> + + <footer> + <p>아주대학교 Software Tool Time - Rust 튜토리얼 (Basic)</p> + </footer> + </body> +</html> \ No newline at end of file diff --git a/docs/07_ko.html b/docs/07_ko.html index 1f7f475ce42e3cef3dd2bbd0b1ce41c5f382329c..8a4d92fef00a4665def628880c5e876e570a4f62 100644 --- a/docs/07_ko.html +++ b/docs/07_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,23 +35,32 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>변수</h1> - <p>Rust에서는 <code>let</code> 키워드를 사용하여 변수를 선언합니다.</p> -<div align="center"> <p> - <img src="https://user-images.githubusercontent.com/2356749/223641752-4b38e61f-82f4-450d-b778-526cb7ad618c.png"> -</p> </div> -<p>값을 할당할 때, Rust는 거의 대부분 변수의 타입을 추론할 수 있습니다.</p> -<p>만약 Rust가 추론하지 못하면 변수의 선언 시 타입을 추가할 수 있습니다.</p> -<p>변수의 이름을 여러 번 사용하여 값을 할당할 수 있습니다.</p> -<p>이를 "shadowing"이라고 하며, 변수의 타입은 재할당될 때마다 변경됩니다.</p> -<p>변수의 이름은 항상 <code>snake_case</code>로 작성합니다.</p> + <h1>The Rust Playground</h1> + <p>이 웹사이트에서는 <a href="https://play.rust-lang.org" target="_blank" rel="noopener">Rust Playground</a> 를 사용하여 온라인에서 직접 실행해 볼 수 있습니다.</p> +<p>우측에서 보다시피 <code>println()</code>도 아닌 <code>println!()</code> 와 같은 코드를 사용하여 stdout에 출력하는 것을 볼 수 있습니다.</p> +<p><code>!</code> 이것은 매크로 (Macro)라는 Rust 언어의 특별한 기능 중 하나인데 우선은 생김새만 알고 나중에 뭔지 알아보겠습니다.</p> +<p>Rust 언어는 쉽게 작성할 수 있도록 (syntactic sugar) 도와주지만 사실은 컴파일러가 아래처럼 처리합니다.</p> +<p>(<code>cargo inspect</code> 명령어)</p> +<pre><code class="rust">#![feature(prelude_import)] + +#[prelude_import] +use std::prelude::rust_2018::*; + +#[macro_use] +extern crate std; + +fn main() { + { + ::std::io::_print(format_args!("Welcome to the playground! You can modify the code in here.\n")); + }; +}</code></pre> <div class="bottomnav"> - <span class="back"><a href="06_ko.html" rel="prev">❮ 이전</a></span> + <span class="back"><a href="chapter_1_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="08_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20let%20%ED%82%A4%EC%9B%8C%EB%93%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A0%EC%96%B8%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%205%3B%20%2F%2F%20x%EC%97%90%205%EB%9D%BC%EB%8A%94%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20y%3A%20f32%20%3D%203.14%3B%20%2F%2F%20y%EC%97%90%203.14%EB%9D%BC%EB%8A%94%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%98%EB%A9%B0%2C%20f32%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%A7%80%EC%A0%95%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%0A%20%20%20%20%2F%2F%20Rust%EB%8A%94%20%EB%8C%80%EB%B6%80%EB%B6%84%EC%9D%98%20%EA%B2%BD%EC%9A%B0%20%EB%B3%80%EC%88%98%EC%9D%98%20%ED%83%80%EC%9E%85%EC%9D%84%20%EC%B6%94%EB%A1%A0%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20%2F%2F%20%EB%A7%8C%EC%95%BD%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%A7%80%EC%A0%95%ED%95%98%EA%B3%A0%20%EC%8B%B6%EB%8B%A4%EB%A9%B4%20%EB%8B%A4%EC%9D%8C%EA%B3%BC%20%EA%B0%99%EC%9D%B4%20%EC%9E%91%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20z%3A%20i64%20%3D%20100%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20mut%20count%20%3D%200%3B%0A%20%20%20%20count%20%3D%201%3B%0A%20%20%20%20count%20%3D%202%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%B3%80%EA%B2%BD%ED%95%98%EC%97%AC%20%EC%9E%AC%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%20%22hello%22%3B%20%2F%2F%20x%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%ED%83%80%EC%9E%85%EC%9E%85%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%205%3B%20%2F%2F%20x%EB%8A%94%20%EC%A0%95%EC%88%98%20%ED%83%80%EC%9E%85%EC%9C%BC%EB%A1%9C%20%EB%B3%80%EA%B2%BD%EB%90%A9%EB%8B%88%EB%8B%A4.%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%80%20snake_case%EB%A1%9C%20%EC%9E%91%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20first_name%20%3D%20%22Choi%22%3B%0A%20%20%20%20let%20last_name%20%3D%20%22Blah%22%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EA%B0%92%EC%9D%84%20%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20println!(%22x%20is%20%7B%7D%22%2C%20x)%3B%20%2F%2F%20%22x%20is%205%22%EA%B0%80%20%EC%B6%9C%EB%A0%A5%EB%90%A9%EB%8B%88%EB%8B%A4.%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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20println!(%22Welcome%20to%20the%20playground!%20You%20can%20modify%20the%20code%20in%20here.%22)%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> <!-- <script> diff --git a/docs/08_ko.html b/docs/08_ko.html index 250a516d258510c42d30bd01e47040e7e414d1bd..77f06730c7ad633645c1816a7d7ee3f598059f02 100644 --- a/docs/08_ko.html +++ b/docs/08_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,20 +35,23 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>변수 업데이트</h1> - <p>Rust는 변수가 변경 가능한지 여부에 대해 많은 주의를 기울입니다.</p> -<ul> -<li><strong>mutable (가변)</strong> - 컴파일러는 해당 변수에 대해 <code>쓰거나 읽을 수</code> 있도록 허용합니다.</li> -<li><strong>immutable (불변)</strong> - 컴파일러는 해당 변수에 대해서 <code>읽기만</code> 가능하도록 허용합니다.</li> -</ul> -<p>가변 값은 <strong>mut</strong> 키워드로 구분됩니다.</p> + <h1>변수</h1> + <p>Rust에서는 <code>let</code> 키워드를 사용하여 변수를 선언합니다.</p> +<div align="center"> <p> + <img src="https://user-images.githubusercontent.com/2356749/223641752-4b38e61f-82f4-450d-b778-526cb7ad618c.png"> +</p> </div> +<p>값을 할당할 때, Rust는 거의 대부분 변수의 타입을 추론할 수 있습니다.</p> +<p>만약 Rust가 추론하지 못하면 변수의 선언 시 타입을 추가할 수 있습니다.</p> +<p>변수의 이름을 여러 번 사용하여 값을 할당할 수 있습니다.</p> +<p>이를 "shadowing"이라고 하며, 변수의 타입은 재할당될 때마다 변경됩니다.</p> +<p>변수의 이름은 항상 <code>snake_case</code>로 작성합니다.</p> <div class="bottomnav"> <span class="back"><a href="07_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="09_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn+main%28%29+%7B%0A++++let+mut+x+%3D+42%3B%0A++++println%21%28%22%7B%7D%22%2C+x%29%3B%0A++++x+%3D+13%3B%0A++++println%21%28%22%7B%7D%22%2C+x%29%3B%0A%0A++++let+y+%3D+23%3B%0A++++println%21%28%22%7B%7D%22%2C+y%29%3B%0A++++%2F%2F+y+%3D+9%3B++%2F%2F+%EC%97%90%EB%9F%AC%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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn%20main()%20%7B%0A%20%20%20%20%2F%2F%20let%20%ED%82%A4%EC%9B%8C%EB%93%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A0%EC%96%B8%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%205%3B%20%2F%2F%20x%EC%97%90%205%EB%9D%BC%EB%8A%94%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20y%3A%20f32%20%3D%203.14%3B%20%2F%2F%20y%EC%97%90%203.14%EB%9D%BC%EB%8A%94%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%98%EB%A9%B0%2C%20f32%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%A7%80%EC%A0%95%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%0A%20%20%20%20%2F%2F%20Rust%EB%8A%94%20%EB%8C%80%EB%B6%80%EB%B6%84%EC%9D%98%20%EA%B2%BD%EC%9A%B0%20%EB%B3%80%EC%88%98%EC%9D%98%20%ED%83%80%EC%9E%85%EC%9D%84%20%EC%B6%94%EB%A1%A0%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20%2F%2F%20%EB%A7%8C%EC%95%BD%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%A7%80%EC%A0%95%ED%95%98%EA%B3%A0%20%EC%8B%B6%EB%8B%A4%EB%A9%B4%20%EB%8B%A4%EC%9D%8C%EA%B3%BC%20%EA%B0%99%EC%9D%B4%20%EC%9E%91%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20z%3A%20i64%20%3D%20100%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B0%92%EC%9D%84%20%ED%95%A0%EB%8B%B9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20mut%20count%20%3D%200%3B%0A%20%20%20%20count%20%3D%201%3B%0A%20%20%20%20count%20%3D%202%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%ED%83%80%EC%9E%85%EC%9D%84%20%EB%B3%80%EA%B2%BD%ED%95%98%EC%97%AC%20%EC%9E%AC%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%20%22hello%22%3B%20%2F%2F%20x%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%ED%83%80%EC%9E%85%EC%9E%85%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20x%20%3D%205%3B%20%2F%2F%20x%EB%8A%94%20%EC%A0%95%EC%88%98%20%ED%83%80%EC%9E%85%EC%9C%BC%EB%A1%9C%20%EB%B3%80%EA%B2%BD%EB%90%A9%EB%8B%88%EB%8B%A4.%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%80%20snake_case%EB%A1%9C%20%EC%9E%91%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20let%20first_name%20%3D%20%22Choi%22%3B%0A%20%20%20%20let%20last_name%20%3D%20%22Blah%22%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EA%B0%92%EC%9D%84%20%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%20%20%20%20println!(%22x%20is%20%7B%7D%22%2C%20x)%3B%20%2F%2F%20%22x%20is%205%22%EA%B0%80%20%EC%B6%9C%EB%A0%A5%EB%90%A9%EB%8B%88%EB%8B%A4.%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> <!-- <script> diff --git a/docs/09_ko.html b/docs/09_ko.html index d2d0ddc1a0c6616466da93f569077970fc310f2b..ce28a93f734e958ca8b0e85e4a5cb220d82bb233 100644 --- a/docs/09_ko.html +++ b/docs/09_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,30 +35,20 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>기본 타입</h1> - <p>Rust는 다양한 익숙한 유형을 제공합니다:</p> + <h1>변수 업데이트</h1> + <p>Rust는 변수가 변경 가능한지 여부에 대해 많은 주의를 기울입니다.</p> <ul> -<li>booleans - <code>bool</code>로 참/거짓을 나타냅니다.</li> -<li>unsigned integers (부호 없는 정수) - 음이 아닌 정수를 나타내는 <code>u8</code>, <code>u16</code>, <code>u32</code>, <code>u64</code>, <code>u128</code>입니다.</li> -<li>signed integers (부호 있는 정수) - 정수를 나타내는 <code>i8</code>, <code>i16</code>, <code>i32</code>, <code>i64</code>, <code>i128</code>입니다.</li> -<li>pointer sized integers - 메모리에서 색인과 항목의 크기를 나타내는 <code>usize</code>, <code>isize</code>입니다.</li> -<li>floating point - <code>f32</code> <code>f64</code></li> -<li>tuple - 고정된 값의 시퀀스를 스택에 전달하는 <code>(value, value, ...)</code> 입니다.</li> -<li>arrays - 컴파일 시점에서 크기가 고정되어 있는 비슷한 요소의 집합으로 <code>[value, value, ...]</code> 입니다.</li> -<li>slices - 런타임에 길이가 알려진 비슷한 요소의 집합입니다.</li> -<li><code>str</code>(문자열 슬라이스) - 런타임에 길이가 알려진 텍스트입니다.</li> +<li><strong>mutable (가변)</strong> - 컴파일러는 해당 변수에 대해 <code>쓰거나 읽을 수</code> 있도록 허용합니다.</li> +<li><strong>immutable (불변)</strong> - 컴파일러는 해당 변수에 대해서 <code>읽기만</code> 가능하도록 허용합니다.</li> </ul> -<p>다른 언어에서 사용하는 것보다 텍스트는 더 복잡할 수 있습니다.<br /> -Rust가 시스템 프로그래밍 언어이기 때문에, 기존에 익숙하지 않은 메모리 문제에 대해서도 신경쓰고 있습니다.<br /> -이에 대해서는 나중에 자세히 다룰 예정입니다.</p> -<p>숫자형은 숫자 끝에 유형을 명시하여 명시적으로 지정할 수 있습니다(예: <code>13u32</code>, <code>2u8</code>).</p> +<p>가변 값은 <strong>mut</strong> 키워드로 구분됩니다.</p> <div class="bottomnav"> <span class="back"><a href="08_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="10_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2012%3B%20%2F%2F%20by%20default%20this%20is%20i32%0A%20%20%20%20let%20a%20%3D%2012u8%3B%0A%20%20%20%20let%20b%20%3D%204.3%3B%20%2F%2F%20by%20default%20this%20is%20f64%0A%20%20%20%20let%20c%20%3D%204.3f32%3B%0A%20%20%20%20let%20bv%20%3D%20true%3B%0A%20%20%20%20let%20t%20%3D%20(13%2C%20false)%3B%0A%20%20%20%20let%20sentence%20%3D%20%22hello%20world!%22%3B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%22%2C%0A%20%20%20%20%20%20%20%20x%2C%20a%2C%20b%2C%20c%2C%20bv%2C%20t.0%2C%20t.1%2C%20sentence%0A%20%20%20%20)%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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn+main%28%29+%7B%0A++++let+mut+x+%3D+42%3B%0A++++println%21%28%22%7B%7D%22%2C+x%29%3B%0A++++x+%3D+13%3B%0A++++println%21%28%22%7B%7D%22%2C+x%29%3B%0A%0A++++let+y+%3D+23%3B%0A++++println%21%28%22%7B%7D%22%2C+y%29%3B%0A++++%2F%2F+y+%3D+9%3B++%2F%2F+%EC%97%90%EB%9F%AC%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> <!-- <script> diff --git a/docs/10_ko.html b/docs/10_ko.html index 0f402e3e4fd8ebfd58ed73f71ee964853c206880..eb4977e3b891598d0ad4da49c75e435d8133c7e7 100644 --- a/docs/10_ko.html +++ b/docs/10_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,16 +35,30 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Basic Type Conversion</h1> - <p>Rust는 숫자 변수 타입에 대해 알고 있어야하며, <code>u8</code>를 <code>u32</code>로 쉽게 사용할 수 없습니다.</p> -<p>다행히 Rust는 <strong>as</strong> 키워드를 사용하여 숫자형을 쉽게 변환할 수 있습니다.</p> + <h1>기본 타입</h1> + <p>Rust는 다양한 익숙한 유형을 제공합니다:</p> +<ul> +<li>booleans - <code>bool</code>로 참/거짓을 나타냅니다.</li> +<li>unsigned integers (부호 없는 정수) - 음이 아닌 정수를 나타내는 <code>u8</code>, <code>u16</code>, <code>u32</code>, <code>u64</code>, <code>u128</code>입니다.</li> +<li>signed integers (부호 있는 정수) - 정수를 나타내는 <code>i8</code>, <code>i16</code>, <code>i32</code>, <code>i64</code>, <code>i128</code>입니다.</li> +<li>pointer sized integers - 메모리에서 색인과 항목의 크기를 나타내는 <code>usize</code>, <code>isize</code>입니다.</li> +<li>floating point - <code>f32</code> <code>f64</code></li> +<li>tuple - 고정된 값의 시퀀스를 스택에 전달하는 <code>(value, value, ...)</code> 입니다.</li> +<li>arrays - 컴파일 시점에서 크기가 고정되어 있는 비슷한 요소의 집합으로 <code>[value, value, ...]</code> 입니다.</li> +<li>slices - 런타임에 길이가 알려진 비슷한 요소의 집합입니다.</li> +<li><code>str</code>(문자열 슬라이스) - 런타임에 길이가 알려진 텍스트입니다.</li> +</ul> +<p>다른 언어에서 사용하는 것보다 텍스트는 더 복잡할 수 있습니다.<br /> +Rust가 시스템 프로그래밍 언어이기 때문에, 기존에 익숙하지 않은 메모리 문제에 대해서도 신경쓰고 있습니다.<br /> +이에 대해서는 나중에 자세히 다룰 예정입니다.</p> +<p>숫자형은 숫자 끝에 유형을 명시하여 명시적으로 지정할 수 있습니다(예: <code>13u32</code>, <code>2u8</code>).</p> <div class="bottomnav"> <span class="back"><a href="09_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="11_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20a%20%3D%2013u8%3B%0A%20%20%20%20let%20b%20%3D%207u32%3B%0A%20%20%20%20let%20c%20%3D%20a%20as%20u32%20%2B%20b%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20c)%3B%0A%0A%20%20%20%20let%20t%20%3D%20true%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20t%20as%20u8)%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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20x%20%3D%2012%3B%20%2F%2F%20by%20default%20this%20is%20i32%0A%20%20%20%20let%20a%20%3D%2012u8%3B%0A%20%20%20%20let%20b%20%3D%204.3%3B%20%2F%2F%20by%20default%20this%20is%20f64%0A%20%20%20%20let%20c%20%3D%204.3f32%3B%0A%20%20%20%20let%20bv%20%3D%20true%3B%0A%20%20%20%20let%20t%20%3D%20(13%2C%20false)%3B%0A%20%20%20%20let%20sentence%20%3D%20%22hello%20world!%22%3B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%20%7B%7D%22%2C%0A%20%20%20%20%20%20%20%20x%2C%20a%2C%20b%2C%20c%2C%20bv%2C%20t.0%2C%20t.1%2C%20sentence%0A%20%20%20%20)%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> <!-- <script> diff --git a/docs/11_ko.html b/docs/11_ko.html index b8cd4a0539ef89db29de39bce7f81ea0f119ff87..f7ef0c26039f1716b3f79b5a59bd17c8820805a6 100644 --- a/docs/11_ko.html +++ b/docs/11_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,18 +35,16 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Constants</h1> - <p>상수는 변수와 달리 곳곳에서 사용되는 공통된 값을 효율적으로 지정하는 데 사용됩니다.</p> -<p>변수와 같은 곳에서 값이 복사되는 대신, 상수는 컴파일 시간에 사용되는 위치에서 직접 값을 대체합니다.</p> -<p>변수와 달리, 상수는 항상 명시적인 유형을 가져야 합니다.</p> -<p>상수 이름은 항상 <code>SCREAMING_SNAKE_CASE</code>로 지정됩니다.</p> + <h1>Basic Type Conversion</h1> + <p>Rust는 숫자 변수 타입에 대해 알고 있어야하며, <code>u8</code>를 <code>u32</code>로 쉽게 사용할 수 없습니다.</p> +<p>다행히 Rust는 <strong>as</strong> 키워드를 사용하여 숫자형을 쉽게 변환할 수 있습니다.</p> <div class="bottomnav"> <span class="back"><a href="10_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="12_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=const%20PI%3A%20f32%20%3D%203.14159%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22To%20make%20an%20apple%20%7B%7D%20from%20scratch%2C%20you%20must%20first%20create%20a%20universe.%22%2C%0A%20%20%20%20%20%20%20%20PI%0A%20%20%20%20)%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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20a%20%3D%2013u8%3B%0A%20%20%20%20let%20b%20%3D%207u32%3B%0A%20%20%20%20let%20c%20%3D%20a%20as%20u32%20%2B%20b%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20c)%3B%0A%0A%20%20%20%20let%20t%20%3D%20true%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20t%20as%20u8)%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> <!-- <script> diff --git a/docs/12_ko.html b/docs/12_ko.html index 88ba123f652335e43fc26b559870b3630b31d3b2..46fe04e6af55e328453ac2d269fd03c407508ed9 100644 --- a/docs/12_ko.html +++ b/docs/12_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,20 +35,18 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Arrays</h1> - <p><em>배열</em>은 동일한 유형의 데이터 요소들의 <strong>고정된 길이 집합</strong>입니다.</p> -<p><em>배열</em>의 데이터 유형은 <code>[T;N]</code> 입니다.<br /> -(T는 요소의 유형이고, N은 컴파일 시간에 알려진 고정 길이)</p> -<p>개별 요소는 <code>[x]</code> 연산자를 사용하여 가져올 수 있습니다.<br /> -여기서 x는 원하는 요소의 <em>usize</em> 인덱스(0부터 시작)입니다.</p> -<p>가변 길이의 컬렉션, 즉 가변 배열은 나중에 <strong>Vectors</strong>에 대한 챕터에서 소개됩니다.</p> + <h1>Constants</h1> + <p>상수는 변수와 달리 곳곳에서 사용되는 공통된 값을 효율적으로 지정하는 데 사용됩니다.</p> +<p>변수와 같은 곳에서 값이 복사되는 대신, 상수는 컴파일 시간에 사용되는 위치에서 직접 값을 대체합니다.</p> +<p>변수와 달리, 상수는 항상 명시적인 유형을 가져야 합니다.</p> +<p>상수 이름은 항상 <code>SCREAMING_SNAKE_CASE</code>로 지정됩니다.</p> <div class="bottomnav"> <span class="back"><a href="11_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="13_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20nums%3A%20%5Bi32%3B%203%5D%20%3D%20%5B1%2C%202%2C%203%5D%3B%0A%20%20%20%20println!(%22%7B%3A%3F%7D%22%2C%20nums)%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20nums%5B1%5D)%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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=const%20PI%3A%20f32%20%3D%203.14159%3B%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%0A%20%20%20%20%20%20%20%20%22To%20make%20an%20apple%20%7B%7D%20from%20scratch%2C%20you%20must%20first%20create%20a%20universe.%22%2C%0A%20%20%20%20%20%20%20%20PI%0A%20%20%20%20)%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> <!-- <script> diff --git a/docs/13_ko.html b/docs/13_ko.html index e948bd82d656044cf47d280a2cec67a30fe3e31b..870b27f666ec6b6e86e823892331e97de2f70445 100644 --- a/docs/13_ko.html +++ b/docs/13_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,34 +35,20 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Functions</h1> - <p>함수는 매개변수 (parameter)가 없거나 여러 개일 수 있습니다.</p> -<p>이 예제에서 <em>add</em> 함수는 <code>i32</code>(32비트 길이의 부호 있는 정수)형 두 개의 인수를 취합니다.</p> -<p><em>subtract</em> 함수에서와 같이 표현식만 반환하려면 <code>return</code> 키워드와 세미콜론을 삭제할 수 있습니다.</p> -<p>함수 이름은 항상 <code>snake_case</code>로 지정됩니다.</p> -<p>힌트: 함수를 정의하는 경우, 해당 함수가 수신하는 데이터를 매개변수 (parameter)라고합니다.<br /> -그 함수를 호출하고 데이터를 전달하면 인수(argument)라고합니다.</p> -<pre><code class="python language-python">def add(x: int, y: int) -> int: - return x + y - -def subtract(x: int, y: int) -> int: - return x - y - -def main(): - print(f"42 + 13 = {add(42, 13)}") - print(f"42 - 13 = {subtract(42, 13)}") - - -if __name__ == "__main__": - main() -</code></pre> + <h1>Arrays</h1> + <p><em>배열</em>은 동일한 유형의 데이터 요소들의 <strong>고정된 길이 집합</strong>입니다.</p> +<p><em>배열</em>의 데이터 유형은 <code>[T;N]</code> 입니다.<br /> +(T는 요소의 유형이고, N은 컴파일 시간에 알려진 고정 길이)</p> +<p>개별 요소는 <code>[x]</code> 연산자를 사용하여 가져올 수 있습니다.<br /> +여기서 x는 원하는 요소의 <em>usize</em> 인덱스(0부터 시작)입니다.</p> +<p>가변 길이의 컬렉션, 즉 가변 배열은 나중에 <strong>Vectors</strong>에 대한 챕터에서 소개됩니다.</p> <div class="bottomnav"> <span class="back"><a href="12_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="14_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20add(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20i32%20%7B%0A%20%20%20%20return%20x%20%2B%20y%3B%0A%7D%0A%0Afn%20subtract(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20i32%20%7B%0A%20%20%20%20x%20-%20y%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%2242%20%2B%2013%20%3D%20%7B%7D%22%2C%20add(42%2C%2013))%3B%0A%20%20%20%20println!(%2242%20-%2013%20%3D%20%7B%7D%22%2C%20subtract(42%2C%2013))%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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20nums%3A%20%5Bi32%3B%203%5D%20%3D%20%5B1%2C%202%2C%203%5D%3B%0A%20%20%20%20println!(%22%7B%3A%3F%7D%22%2C%20nums)%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20nums%5B1%5D)%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> <!-- <script> diff --git a/docs/14_ko.html b/docs/14_ko.html index 0345c0edf6e5991d1185a3a0b9369388d8e8902f..e487c7a246d5fe5d85a4c737cf7aeea0902acec0 100644 --- a/docs/14_ko.html +++ b/docs/14_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,18 +35,34 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Multiple Return Values</h1> - <p>함수는 값의 <strong>튜플</strong>을 반환하여 여러 값을 반환할 수 있습니다.</p> -<p>튜플 요소는 인덱스 번호를 사용하여 참조할 수 있습니다.</p> -<p>Rust는 여러 형식의 destructuring을 지원합니다.<br /> -우리는 더 많은 형태로 볼 것이며, 이를 통해 데이터 구조의 하위 요소를 직관적으로 추출할 수 있습니다.</p> + <h1>Functions</h1> + <p>함수는 매개변수 (parameter)가 없거나 여러 개일 수 있습니다.</p> +<p>이 예제에서 <em>add</em> 함수는 <code>i32</code>(32비트 길이의 부호 있는 정수)형 두 개의 인수를 취합니다.</p> +<p><em>subtract</em> 함수에서와 같이 표현식만 반환하려면 <code>return</code> 키워드와 세미콜론을 삭제할 수 있습니다.</p> +<p>함수 이름은 항상 <code>snake_case</code>로 지정됩니다.</p> +<p>힌트: 함수를 정의하는 경우, 해당 함수가 수신하는 데이터를 매개변수 (parameter)라고합니다.<br /> +그 함수를 호출하고 데이터를 전달하면 인수(argument)라고합니다.</p> +<pre><code class="python language-python">def add(x: int, y: int) -> int: + return x + y + +def subtract(x: int, y: int) -> int: + return x - y + +def main(): + print(f"42 + 13 = {add(42, 13)}") + print(f"42 - 13 = {subtract(42, 13)}") + + +if __name__ == "__main__": + main() +</code></pre> <div class="bottomnav"> <span class="back"><a href="13_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="15_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20add(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20i32%20%7B%0A%20%20%20%20return%20x%20%2B%20y%3B%0A%7D%0A%0Afn%20subtract(x%3A%20i32%2C%20y%3A%20i32)%20-%3E%20i32%20%7B%0A%20%20%20%20x%20-%20y%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20println!(%2242%20%2B%2013%20%3D%20%7B%7D%22%2C%20add(42%2C%2013))%3B%0A%20%20%20%20println!(%2242%20-%2013%20%3D%20%7B%7D%22%2C%20subtract(42%2C%2013))%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> <!-- <script> diff --git a/docs/15_ko.html b/docs/15_ko.html index bb5b362ab090603d9c9ed600fde2cf4c40239fde..b7b05bd3cc47cbf0f69c657fc13b1882e925e789 100644 --- a/docs/15_ko.html +++ b/docs/15_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,43 +35,18 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>match</h1> - <p>Rust에서 match 키워드는 패턴 매칭을 위해 사용하고</p> -<p>값과 일련의 패턴을 비교할 수 있게 해줍니다.</p> -<p>그리고 첫 번째 일치하는 패턴에 해당하는 코드 블록을 실행합니다.</p> -<pre><code class="rust">fn main() { - let number = 42; - - match number { - 0 => println!("숫자는 영입니다"), - 1 => println!("숫자는 일입니다"), - 42 => println!("인생, 우주, 그리고 모든 것에 대한 답"), - _ => println!("숫자는 다른 것입니다"), - } -}</code></pre> -<p>여기서는 number 변수의 값을 여러 패턴과 비교합니다.</p> -<p><code>_</code> 패턴은 이전 패턴에서 명시적으로 다루지 않은 모든 값을 매치하는 <code>catch-all</code> 패턴입니다.</p> -<pre><code class="rust">fn classify_age(age: u8) { - match age { - 0..=12 => println!("어린이"), - 13..=19 => println!("청소년"), - 20..=64 => println!("성인"), - _ => println!("노인"), - } -} -fn main() { - let age = 25; - classify_age(age); -}</code></pre> -<p>이 예제에서는 match 표현식을 사용하여 나이를 그룹으로 분류하고,</p> -<p>나이 변수와 매치하기 위해 범위를 패턴으로 사용합니다.</p> + <h1>Multiple Return Values</h1> + <p>함수는 값의 <strong>튜플</strong>을 반환하여 여러 값을 반환할 수 있습니다.</p> +<p>튜플 요소는 인덱스 번호를 사용하여 참조할 수 있습니다.</p> +<p>Rust는 여러 형식의 destructuring을 지원합니다.<br /> +우리는 더 많은 형태로 볼 것이며, 이를 통해 데이터 구조의 하위 요소를 직관적으로 추출할 수 있습니다.</p> <div class="bottomnav"> <span class="back"><a href="14_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="16_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EC%97%B4%EA%B1%B0%ED%98%95+%EC%A0%95%EC%9D%98%3A+%EC%97%AC%EB%9F%AC+%EB%8F%84%ED%98%95%EC%9D%84+%EB%82%98%ED%83%80%EB%83%85%EB%8B%88%EB%8B%A4.%0Aenum+Shape+%7B%0A++++Circle+%7B+radius%3A+f64+%7D%2C%0A++++Square+%7B+side%3A+f64+%7D%2C%0A++++Rectangle+%7B+width%3A+f64%2C+height%3A+f64+%7D%2C%0A%7D%0A%0A%2F%2F+%EB%8F%84%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+calculate_area%28shape%3A+Shape%29+-%3E+f64+%7B%0A++++%2F%2F+%ED%8C%A8%ED%84%B4+%EB%A7%A4%EC%B9%AD%EC%9D%84+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%8F%84%ED%98%95%EC%9D%98+%EC%A2%85%EB%A5%98%EC%97%90+%EB%94%B0%EB%9D%BC+%EA%B3%84%EC%82%B0+%EB%B0%A9%EC%8B%9D%EC%9D%84+%EC%84%A0%ED%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle+%7B+radius+%7D+%3D%3E+std%3A%3Af64%3A%3Aconsts%3A%3API+*+radius+*+radius%2C+%2F%2F+%EC%9B%90%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%84%EC%82%B0%0A++++++++Shape%3A%3ASquare+%7B+side+%7D+%3D%3E+side+*+side%2C++++++++++++++++++++++++++++++%2F%2F+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%84%EC%82%B0%0A++++++++Shape%3A%3ARectangle+%7B+width%2C+height+%7D+%3D%3E+width+*+height%2C+++++++++++++++%2F%2F+%EC%A7%81%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%84%EC%82%B0%0A++++%7D%0A%7D%0A%0Afn+main%28%29+%7B%0A++++%2F%2F+%EC%97%AC%EB%9F%AC+%EB%8F%84%ED%98%95+%EC%83%9D%EC%84%B1%0A++++let+circle+%3D+Shape%3A%3ACircle+%7B+radius%3A+5.0+%7D%3B%0A++++let+square+%3D+Shape%3A%3ASquare+%7B+side%3A+4.0+%7D%3B%0A++++let+rectangle+%3D+Shape%3A%3ARectangle+%7B%0A++++++++width%3A+6.0%2C%0A++++++++height%3A+3.0%2C%0A++++%7D%3B%0A%0A++++%2F%2F+%ED%8C%A8%ED%84%B4+%EB%A7%A4%EC%B9%AD%EC%9D%84+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EA%B3%A0+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++let+circle_area+%3D+calculate_area%28circle%29%3B%0A++++let+square_area+%3D+calculate_area%28square%29%3B%0A++++let+rectangle_area+%3D+calculate_area%28rectangle%29%3B%0A%0A++++println%21%28%22%EC%9B%90%EC%9D%98+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+circle_area%29%3B%0A++++println%21%28%22%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+square_area%29%3B%0A++++println%21%28%22%EC%A7%81%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+rectangle_area%29%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> + <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> <!-- <script> diff --git a/docs/16_ko.html b/docs/16_ko.html index 8d6c6bf73654eeef20f19a11b83ec5934fcc5bd7..99cdb96f5353c19a4f4ac28fd9809e7a31e3c189 100644 --- a/docs/16_ko.html +++ b/docs/16_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,122 +35,43 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Struct and Enum</h1> - <p><strong>구조체 (Struct)</strong></p> -<p>구조체는 struct 키워드를 사용하여 정의하며, 이름과 중괄호로 묶인 명명된 필드 집합이 뒤따릅니다.</p> -<p>다음은 Person 구조체의 예입니다:</p> -<pre><code class="rust">struct Person { - name: String, - age: u8, -}</code></pre> -<p>구조체의 인스턴스를 생성하려면, 구조체 이름 뒤에 중괄호를 사용하고 필드에 값을 할당합니다.<br /> -예를 들면:</p> -<pre><code class="rust">let person = Person { name: String::from("Alice"), age: 30 };</code></pre> -<hr /> -<p><strong>열거형 (Enum)</strong></p> -<p>열거형(enum, "enumeration"의 줄임말)은 고정된 명명된 값 집합인 "변종(variants)"을 가진 타입을 나타냅니다.</p> -<p>열거형을 정의하려면, enum 키워드를 사용하고 이름과 중괄호로 묶인 명명된 변종 집합이 뒤따릅니다.</p> -<p>다음은 Status 열거형의 예입니다:</p> -<pre><code class="rust">enum Status { - Active, - Inactive, - Pending, -}</code></pre> -<p>열거형의 인스턴스를 생성하려면, 열거형 이름 뒤에 두 개의 콜론(<code>::</code>)과 변종 이름을 사용합니다.</p> -<p>예를 들면:</p> -<pre><code class="rust">let status = Status::Active;</code></pre> -<p>열거형 변종에 따라 다른 작업을 수행하려면 match 표현식을 사용할 수 있습니다:</p> -<pre><code class="rust">let user_status = Status::Active;</code></pre> -<p>열거형을 다루려면, 종종 match 표현식을 사용하며, 이를 통해 열거형 변종에 따라 다른 작업을 수행할 수 있습니다:</p> -<pre><code class="rust">fn print_status_message(status: Status) { - match status { - Status::Active => println!("사용자가 활성 상태입니다."), - Status::Inactive => println!("사용자가 비활성 상태입니다."), - Status::Pending => println!("사용자가 보류 중입니다."), - } -} -fn main() { - let user_status = Status::Active; - print_status_message(user_status); -}</code></pre> -<hr /> -<p><strong>Tuple Struct, Enum</strong></p> -<p>주로 간결한 표현, 타입 안전성 및 논리적 구조를 위해 사용됩니다.</p> -<ul> -<li>튜플 구조체 (Tuple Struct): 튜플 구조체는 필드에 이름이 없는 구조체로, 간단한 데이터 구조를 표현할 때 유용합니다. 튜플 구조체를 사용하면, 구조체의 의미를 명확하게 나타낼 수 있으며, 일반 튜플보다 더 강력한 타입 안전성을 제공합니다. 예를 들어, 두 개의 float 값을 나타내는 Point2D와 Vector2D를 구별하기 위해 튜플 구조체를 사용할 수 있습니다. 이렇게 하면 코드의 가독성과 정확성이 향상됩니다.</li> -<li>열거형 (Enum): 열거형은 서로 관련된 값의 집합을 표현하기 위해 사용됩니다. 열거형은 여러 변종(variants)을 가질 수 있으며, 각 변종은 고유한 타입입니다. 열거형은 논리적으로 관련된 여러 값을 그룹화하여 코드의 명확성과 구조를 개선하는 데 도움이 됩니다. 또한 열거형은 패턴 매칭을 사용하여 값에 따라 다양한 작업을 수행할 수 있어, 런타임에 오류가 발생하는 가능성이 줄어듭니다.</li> -<li>튜플 열거형 변종 (Tuple Enum Variants): 튜플 열거형 변종은 열거형의 각 변종에 데이터를 연관시키는 데 사용됩니다. 튜플 열거형 변종은 각 변종에 서로 다른 타입과 수의 값을 저장할 수 있습니다. 이러한 변종은 열거형의 다양한 경우를 명확하게 구분하고, 관련 데이터를 함께 저장하여 논리적 구조를 제공하는 데 유용합니다. 패턴 매칭을 사용하면 튜플 열거형 변종의 값을 안전하게 추출하고, 해당 값에 따라 다양한 작업을 수행할 수 있습니다.</li> -</ul> -<pre><code class="rust">// 튜플 구조체 (Tuple Struct) -struct Point3D(f32, f32, f32); - -// 열거형에 튜플 변종 (Tuple Enum Variant) 포함 -enum Shape { - Circle(f32), - Rectangle(f32, f32), -} + <h1>match</h1> + <p>Rust에서 match 키워드는 패턴 매칭을 위해 사용하고</p> +<p>값과 일련의 패턴을 비교할 수 있게 해줍니다.</p> +<p>그리고 첫 번째 일치하는 패턴에 해당하는 코드 블록을 실행합니다.</p> +<pre><code class="rust">fn main() { + let number = 42; -fn main() { - let point = Point3D(1.0, 2.0, 3.0); - let circle = Shape::Circle(5.0); - let rectangle = Shape::Rectangle(4.0, 6.0); - - // 튜플 구조체의 값에 접근 - println!("x 좌표: {}", point.0); - println!("y 좌표: {}", point.1); - println!("z 좌표: {}", point.2); - - // 튜플 열거형 변종의 값에 접근 - match circle { - Shape::Circle(radius) => println!("원의 반지름: {}", radius), - _ => (), + match number { + 0 => println!("숫자는 영입니다"), + 1 => println!("숫자는 일입니다"), + 42 => println!("인생, 우주, 그리고 모든 것에 대한 답"), + _ => println!("숫자는 다른 것입니다"), } }</code></pre> -<hr /> -<p><strong>Nested</strong><br /> -중첩된 Struct과 Enum을 만들고 싶다면?</p> -<pre><code class="rust">// 중첩된 구조체 (Nested Struct) -struct Address { - street: String, - city: String, -} - -struct Person { - name: String, - address: Address, -} -// 중첩된 열거형 (Nested Enum) -enum Animal { - Mammal { - species: String, - is_domestic: bool, - }, - Reptile { - species: String, - is_poisonous: bool, - }, +<p>여기서는 number 변수의 값을 여러 패턴과 비교합니다.</p> +<p><code>_</code> 패턴은 이전 패턴에서 명시적으로 다루지 않은 모든 값을 매치하는 <code>catch-all</code> 패턴입니다.</p> +<pre><code class="rust">fn classify_age(age: u8) { + match age { + 0..=12 => println!("어린이"), + 13..=19 => println!("청소년"), + 20..=64 => println!("성인"), + _ => println!("노인"), + } } - fn main() { - let person = Person { - name: String::from("지훈"), - address: Address { - street: String::from("서울로"), - city: String::from("서울"), - }, - }; - let dog = Animal::Mammal { - species: String::from("개"), - is_domestic: true, - }; + let age = 25; + classify_age(age); }</code></pre> +<p>이 예제에서는 match 표현식을 사용하여 나이를 그룹으로 분류하고,</p> +<p>나이 변수와 매치하기 위해 범위를 패턴으로 사용합니다.</p> <div class="bottomnav"> <span class="back"><a href="15_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="17_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="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" 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=2021&code=%2F%2F+%EC%97%B4%EA%B1%B0%ED%98%95+%EC%A0%95%EC%9D%98%3A+%EC%97%AC%EB%9F%AC+%EB%8F%84%ED%98%95%EC%9D%84+%EB%82%98%ED%83%80%EB%83%85%EB%8B%88%EB%8B%A4.%0Aenum+Shape+%7B%0A++++Circle+%7B+radius%3A+f64+%7D%2C%0A++++Square+%7B+side%3A+f64+%7D%2C%0A++++Rectangle+%7B+width%3A+f64%2C+height%3A+f64+%7D%2C%0A%7D%0A%0A%2F%2F+%EB%8F%84%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+calculate_area%28shape%3A+Shape%29+-%3E+f64+%7B%0A++++%2F%2F+%ED%8C%A8%ED%84%B4+%EB%A7%A4%EC%B9%AD%EC%9D%84+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%8F%84%ED%98%95%EC%9D%98+%EC%A2%85%EB%A5%98%EC%97%90+%EB%94%B0%EB%9D%BC+%EA%B3%84%EC%82%B0+%EB%B0%A9%EC%8B%9D%EC%9D%84+%EC%84%A0%ED%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle+%7B+radius+%7D+%3D%3E+std%3A%3Af64%3A%3Aconsts%3A%3API+*+radius+*+radius%2C+%2F%2F+%EC%9B%90%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%84%EC%82%B0%0A++++++++Shape%3A%3ASquare+%7B+side+%7D+%3D%3E+side+*+side%2C++++++++++++++++++++++++++++++%2F%2F+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%84%EC%82%B0%0A++++++++Shape%3A%3ARectangle+%7B+width%2C+height+%7D+%3D%3E+width+*+height%2C+++++++++++++++%2F%2F+%EC%A7%81%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%84%EC%82%B0%0A++++%7D%0A%7D%0A%0Afn+main%28%29+%7B%0A++++%2F%2F+%EC%97%AC%EB%9F%AC+%EB%8F%84%ED%98%95+%EC%83%9D%EC%84%B1%0A++++let+circle+%3D+Shape%3A%3ACircle+%7B+radius%3A+5.0+%7D%3B%0A++++let+square+%3D+Shape%3A%3ASquare+%7B+side%3A+4.0+%7D%3B%0A++++let+rectangle+%3D+Shape%3A%3ARectangle+%7B%0A++++++++width%3A+6.0%2C%0A++++++++height%3A+3.0%2C%0A++++%7D%3B%0A%0A++++%2F%2F+%ED%8C%A8%ED%84%B4+%EB%A7%A4%EC%B9%AD%EC%9D%84+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EA%B3%A0+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++let+circle_area+%3D+calculate_area%28circle%29%3B%0A++++let+square_area+%3D+calculate_area%28square%29%3B%0A++++let+rectangle_area+%3D+calculate_area%28rectangle%29%3B%0A%0A++++println%21%28%22%EC%9B%90%EC%9D%98+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+circle_area%29%3B%0A++++println%21%28%22%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+square_area%29%3B%0A++++println%21%28%22%EC%A7%81%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+rectangle_area%29%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> <!-- <script> diff --git a/docs/17_ko.html b/docs/17_ko.html index 9c5f09438e4ca5706df83ce62367061287c3c6de..e5ab485d0dc188bf02d601c3dbca922b6433aea7 100644 --- a/docs/17_ko.html +++ b/docs/17_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,17 +35,122 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Returning Nothing</h1> - <p>함수에 대해 반환 유형이 지정되어 있지 않으면, <em>unit</em>이라고도 하는 빈 튜플을 반환합니다.</p> -<p>빈 튜플은 <code>()</code>로 나타낼 수 있습니다.</p> -<p><code>()</code>을 사용하는 것은 드문 경우이지만 충분히 자주 출현하기 때문에 무슨 일이 일어나는지 알아둘 가치가 있습니다.</p> + <h1>Struct and Enum</h1> + <p><strong>구조체 (Struct)</strong></p> +<p>구조체는 struct 키워드를 사용하여 정의하며, 이름과 중괄호로 묶인 명명된 필드 집합이 뒤따릅니다.</p> +<p>다음은 Person 구조체의 예입니다:</p> +<pre><code class="rust">struct Person { + name: String, + age: u8, +}</code></pre> +<p>구조체의 인스턴스를 생성하려면, 구조체 이름 뒤에 중괄호를 사용하고 필드에 값을 할당합니다.<br /> +예를 들면:</p> +<pre><code class="rust">let person = Person { name: String::from("Alice"), age: 30 };</code></pre> +<hr /> +<p><strong>열거형 (Enum)</strong></p> +<p>열거형(enum, "enumeration"의 줄임말)은 고정된 명명된 값 집합인 "변종(variants)"을 가진 타입을 나타냅니다.</p> +<p>열거형을 정의하려면, enum 키워드를 사용하고 이름과 중괄호로 묶인 명명된 변종 집합이 뒤따릅니다.</p> +<p>다음은 Status 열거형의 예입니다:</p> +<pre><code class="rust">enum Status { + Active, + Inactive, + Pending, +}</code></pre> +<p>열거형의 인스턴스를 생성하려면, 열거형 이름 뒤에 두 개의 콜론(<code>::</code>)과 변종 이름을 사용합니다.</p> +<p>예를 들면:</p> +<pre><code class="rust">let status = Status::Active;</code></pre> +<p>열거형 변종에 따라 다른 작업을 수행하려면 match 표현식을 사용할 수 있습니다:</p> +<pre><code class="rust">let user_status = Status::Active;</code></pre> +<p>열거형을 다루려면, 종종 match 표현식을 사용하며, 이를 통해 열거형 변종에 따라 다른 작업을 수행할 수 있습니다:</p> +<pre><code class="rust">fn print_status_message(status: Status) { + match status { + Status::Active => println!("사용자가 활성 상태입니다."), + Status::Inactive => println!("사용자가 비활성 상태입니다."), + Status::Pending => println!("사용자가 보류 중입니다."), + } +} +fn main() { + let user_status = Status::Active; + print_status_message(user_status); +}</code></pre> +<hr /> +<p><strong>Tuple Struct, Enum</strong></p> +<p>주로 간결한 표현, 타입 안전성 및 논리적 구조를 위해 사용됩니다.</p> +<ul> +<li>튜플 구조체 (Tuple Struct): 튜플 구조체는 필드에 이름이 없는 구조체로, 간단한 데이터 구조를 표현할 때 유용합니다. 튜플 구조체를 사용하면, 구조체의 의미를 명확하게 나타낼 수 있으며, 일반 튜플보다 더 강력한 타입 안전성을 제공합니다. 예를 들어, 두 개의 float 값을 나타내는 Point2D와 Vector2D를 구별하기 위해 튜플 구조체를 사용할 수 있습니다. 이렇게 하면 코드의 가독성과 정확성이 향상됩니다.</li> +<li>열거형 (Enum): 열거형은 서로 관련된 값의 집합을 표현하기 위해 사용됩니다. 열거형은 여러 변종(variants)을 가질 수 있으며, 각 변종은 고유한 타입입니다. 열거형은 논리적으로 관련된 여러 값을 그룹화하여 코드의 명확성과 구조를 개선하는 데 도움이 됩니다. 또한 열거형은 패턴 매칭을 사용하여 값에 따라 다양한 작업을 수행할 수 있어, 런타임에 오류가 발생하는 가능성이 줄어듭니다.</li> +<li>튜플 열거형 변종 (Tuple Enum Variants): 튜플 열거형 변종은 열거형의 각 변종에 데이터를 연관시키는 데 사용됩니다. 튜플 열거형 변종은 각 변종에 서로 다른 타입과 수의 값을 저장할 수 있습니다. 이러한 변종은 열거형의 다양한 경우를 명확하게 구분하고, 관련 데이터를 함께 저장하여 논리적 구조를 제공하는 데 유용합니다. 패턴 매칭을 사용하면 튜플 열거형 변종의 값을 안전하게 추출하고, 해당 값에 따라 다양한 작업을 수행할 수 있습니다.</li> +</ul> +<pre><code class="rust">// 튜플 구조체 (Tuple Struct) +struct Point3D(f32, f32, f32); + +// 열거형에 튜플 변종 (Tuple Enum Variant) 포함 +enum Shape { + Circle(f32), + Rectangle(f32, f32), +} + +fn main() { + let point = Point3D(1.0, 2.0, 3.0); + let circle = Shape::Circle(5.0); + let rectangle = Shape::Rectangle(4.0, 6.0); + + // 튜플 구조체의 값에 접근 + println!("x 좌표: {}", point.0); + println!("y 좌표: {}", point.1); + println!("z 좌표: {}", point.2); + + // 튜플 열거형 변종의 값에 접근 + match circle { + Shape::Circle(radius) => println!("원의 반지름: {}", radius), + _ => (), + } +}</code></pre> +<hr /> +<p><strong>Nested</strong><br /> +중첩된 Struct과 Enum을 만들고 싶다면?</p> +<pre><code class="rust">// 중첩된 구조체 (Nested Struct) +struct Address { + street: String, + city: String, +} + +struct Person { + name: String, + address: Address, +} +// 중첩된 열거형 (Nested Enum) +enum Animal { + Mammal { + species: String, + is_domestic: bool, + }, + Reptile { + species: String, + is_poisonous: bool, + }, +} + +fn main() { + let person = Person { + name: String::from("지훈"), + address: Address { + street: String::from("서울로"), + city: String::from("서울"), + }, + }; + let dog = Animal::Mammal { + species: String::from("개"), + is_domestic: true, + }; +}</code></pre> <div class="bottomnav"> <span class="back"><a href="16_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="18_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20make_nothing()%20-%3E%20()%20%7B%0A%20%20%20%20return%20()%3B%0A%7D%0A%0A%2F%2F%20the%20return%20type%20is%20implied%20as%20()%0Afn%20make_nothing2()%20%7B%0A%20%20%20%20%2F%2F%20this%20function%20will%20return%20()%20if%20nothing%20is%20specified%20to%20return%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20a%20%3D%20make_nothing()%3B%0A%20%20%20%20let%20b%20%3D%20make_nothing2()%3B%0A%0A%20%20%20%20%2F%2F%20Printing%20a%20debug%20string%20for%20a%20and%20b%0A%20%20%20%20%2F%2F%20Because%20it's%20hard%20to%20print%20nothingness%0A%20%20%20%20println!(%22The%20value%20of%20a%3A%20%7B%3A%3F%7D%22%2C%20a)%3B%0A%20%20%20%20println!(%22The%20value%20of%20b%3A%20%7B%3A%3F%7D%22%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> + <iframe id="rust-playground" width="100%" src="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" 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> <!-- <script> diff --git a/docs/18_ko.html b/docs/18_ko.html index 93293705948bee3fb8ddab143d12b86b935f0670..eb04eaf12643d9f473fc94fc18f45ee81d3371d9 100644 --- a/docs/18_ko.html +++ b/docs/18_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,15 +35,17 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Error handling</h1> - <p>Error handling</p> + <h1>Returning Nothing</h1> + <p>함수에 대해 반환 유형이 지정되어 있지 않으면, <em>unit</em>이라고도 하는 빈 튜플을 반환합니다.</p> +<p>빈 튜플은 <code>()</code>로 나타낼 수 있습니다.</p> +<p><code>()</code>을 사용하는 것은 드문 경우이지만 충분히 자주 출현하기 때문에 무슨 일이 일어나는지 알아둘 가치가 있습니다.</p> <div class="bottomnav"> <span class="back"><a href="17_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="19_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20make_nothing()%20-%3E%20()%20%7B%0A%20%20%20%20return%20()%3B%0A%7D%0A%0A%2F%2F%20the%20return%20type%20is%20implied%20as%20()%0Afn%20make_nothing2()%20%7B%0A%20%20%20%20%2F%2F%20this%20function%20will%20return%20()%20if%20nothing%20is%20specified%20to%20return%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20a%20%3D%20make_nothing()%3B%0A%20%20%20%20let%20b%20%3D%20make_nothing2()%3B%0A%0A%20%20%20%20%2F%2F%20Printing%20a%20debug%20string%20for%20a%20and%20b%0A%20%20%20%20%2F%2F%20Because%20it's%20hard%20to%20print%20nothingness%0A%20%20%20%20println!(%22The%20value%20of%20a%3A%20%7B%3A%3F%7D%22%2C%20a)%3B%0A%20%20%20%20println!(%22The%20value%20of%20b%3A%20%7B%3A%3F%7D%22%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> <!-- <script> diff --git a/docs/19_ko.html b/docs/19_ko.html index 62052da7545609933dbe0e1b090753aa9ae100ea..b1310e8001e96f6092b80653f6a41b5d7a9cacf8 100644 --- a/docs/19_ko.html +++ b/docs/19_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,23 +35,15 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Chapter 1 - 마무리</h1> - <p>Rust의 기초는 그렇게 나쁘지 않죠?</p> -<p>시스템 프로그래밍 언어로서, Rust는 메모리 내 값을 매우 신경쓰며,</p> -<p>수정이 가능한지 불가능한지 여부, 그리고 수학 연산이 의도한 대로 수행되는지 확인합니다.</p> -<p>참고:</p> -<ul> -<li><a href="https://www.youtube.com/watch?v=n5TRBkbystY" target="_blank" rel="noopener">Youtube: Rust Cast - Rust의 기본 숫자 유형에 대한 더 깊은 이해</a></li> -<li><a href="https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-02-data-types.html" target="_blank" rel="noopener">Website: Rust Book 2018 - 기본 데이터 유형에 대한 자세한 설명</a></li> -<li><a href="https://cheats.rs/#basic-types" target="_blank" rel="noopener">Website: Rust Cheat Sheet - Data Types</a></li> -</ul> + <h1>Error handling</h1> + <p>Error handling</p> <div class="bottomnav"> <span class="back"><a href="18_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="chapter_2_ko.html" rel="next">다음 ❯</a></span> + <span class="next"><a href="20_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EC%86%8C%EC%9C%A0%EA%B6%8C%2C+%EB%B9%8C%EB%A6%BC%2C+%EC%B0%B8%EC%A1%B0%2C+%EB%B2%94%EC%9C%84+%EB%93%B1%EC%9D%98+%EA%B8%B0%EB%8A%A5%EC%9D%84+%ED%95%9C+%EB%B2%88%EC%97%90+%EC%82%AC%EC%9A%A9%0D%0A%23%5Bderive%28Debug%29%5D%0D%0Astruct+MyStruct+%7B%0D%0A++++data%3A+String%2C%0D%0A%7D%0D%0A%0D%0Afn+print_and_modify%28s%3A+%26mut+MyStruct%29+%7B%0D%0A++++println%21%28%22%5Ct%3E+MyStruct%EB%A5%BC+%EC%B0%B8%EC%A1%B0%3A+%7B%3A%3F%7D%22%2C+s%29%3B%0D%0A++++s.data.push_str%28%22+%EC%88%98%EC%A0%95%EB%90%A8%22%29%3B%0D%0A%7D%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++let+mut+my_struct1+%3D+MyStruct+%7B%0D%0A++++++++data%3A+String%3A%3Afrom%28%22MyStruct1%22%29%2C%0D%0A++++%7D%3B%0D%0A%0D%0A++++let+mut+my_struct2+%3D+MyStruct+%7B%0D%0A++++++++data%3A+String%3A%3Afrom%28%22MyStruct2%22%29%2C%0D%0A++++%7D%3B%0D%0A%0D%0A++++%2F%2F+%EB%B6%88%EB%B3%80+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++println%21%28%22%EB%B6%88%EB%B3%80+%EC%B0%B8%EC%A1%B0%3A+%7B%3A%3F%7D%22%2C+%26my_struct1%29%3B%0D%0A%0D%0A++++%2F%2F+%EA%B0%80%EB%B3%80+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC+%EC%88%98%EC%A0%95%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++print_and_modify%28%26mut+my_struct1%29%3B%0D%0A++++println%21%28%22%EC%88%98%EC%A0%95%EB%90%9C+MyStruct1%3A+%7B%3A%3F%7D%22%2C+my_struct1%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%94%EC%9C%84%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%B9%8C%EB%A6%BC%EC%9D%98+%EA%B7%9C%EC%B9%99%EC%9D%84+%EB%B3%B4%EC%97%AC%EC%A4%8D%EB%8B%88%EB%8B%A4.%0D%0A++++%7B%0D%0A++++++++let+mut_ref+%3D+%26mut+my_struct2%3B+%2F%2F+%EA%B0%80%EB%B3%80+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++++++print_and_modify%28mut_ref%29%3B+%2F%2F+%EA%B0%80%EB%B3%80+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%ED%95%A8%EC%88%98%EC%97%90+%EC%A0%84%EB%8B%AC%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++++++%2F%2F+%EC%9D%B4+%EC%A7%80%EC%A0%90%EC%97%90%EC%84%9C+mut_ref%EB%A5%BC+%EB%8D%94+%EC%9D%B4%EC%83%81+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%0D%0A++++%7D%0D%0A%0D%0A++++%2F%2F+%EB%B2%94%EC%9C%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%9C+%ED%9B%84%EC%97%90%EB%8A%94+%EC%9B%90%EB%9E%98+%EB%B3%80%EC%88%98%EB%A5%BC+%EB%8B%A4%EC%8B%9C+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0D%0A++++println%21%28%22%EC%88%98%EC%A0%95%EB%90%9C+MyStruct2%3A+%7B%3A%3F%7D%22%2C+my_struct2%29%3B%0D%0A%0D%0A++++%2F%2F+%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%84+%EC%9D%B4%EB%8F%99%EC%8B%9C%ED%82%B5%EB%8B%88%EB%8B%A4.%0D%0A++++let+my_struct3+%3D+MyStruct+%7B%0D%0A++++++++data%3A+String%3A%3Afrom%28%22MyStruct3%22%29%2C%0D%0A++++%7D%3B%0D%0A++++let+my_struct4+%3D+my_struct3%3B+%2F%2F+%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%84+%EC%9D%B4%EB%8F%99%EC%8B%9C%ED%82%B5%EB%8B%88%EB%8B%A4.%0D%0A++++%2F%2F+%EC%9D%B4%EC%A0%9C+my_struct3%EC%9D%80+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%0D%0A++++println%21%28%22%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%B4+%EC%9D%B4%EB%8F%99%EB%90%9C+MyStruct4%3A+%7B%3A%3F%7D%22%2C+my_struct4%29%3B%0D%0A%7D%0D%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> + <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> <!-- <script> diff --git a/docs/20_ko.html b/docs/20_ko.html index 0bf078c0fb9228e0fd2715285667d3e446e1f8c8..22539f1a0c72c464430801b783b7ae16870f2935 100644 --- a/docs/20_ko.html +++ b/docs/20_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -22,6 +22,7 @@ <link rel="/manifest" href="./site.webmanifest"> <script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script> + <script src="./tour.js" defer></script> <!-- <script>hljs.highlightAll();</script> --> <script src="./highlight.badge.min.js"></script> @@ -34,14 +35,24 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Hey</h1> - <p>CSW</p> + <h1>Chapter 1 - 마무리</h1> + <p>Rust의 기초는 그렇게 나쁘지 않죠?</p> +<p>시스템 프로그래밍 언어로서, Rust는 메모리 내 값을 매우 신경쓰며,</p> +<p>수정이 가능한지 불가능한지 여부, 그리고 수학 연산이 의도한 대로 수행되는지 확인합니다.</p> +<p>참고:</p> +<ul> +<li><a href="https://www.youtube.com/watch?v=n5TRBkbystY" target="_blank" rel="noopener">Youtube: Rust Cast - Rust의 기본 숫자 유형에 대한 더 깊은 이해</a></li> +<li><a href="https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-02-data-types.html" target="_blank" rel="noopener">Website: Rust Book 2018 - 기본 데이터 유형에 대한 자세한 설명</a></li> +<li><a href="https://cheats.rs/#basic-types" target="_blank" rel="noopener">Website: Rust Cheat Sheet - Data Types</a></li> +</ul> <div class="bottomnav"> - <span class="back"><a href="chapter_2_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="chapter_3_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="19_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="chapter_2_ko.html" rel="next">다음 ❯</a></span> + </div> </div> + <div class="code"> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EC%86%8C%EC%9C%A0%EA%B6%8C%2C+%EB%B9%8C%EB%A6%BC%2C+%EC%B0%B8%EC%A1%B0%2C+%EB%B2%94%EC%9C%84+%EB%93%B1%EC%9D%98+%EA%B8%B0%EB%8A%A5%EC%9D%84+%ED%95%9C+%EB%B2%88%EC%97%90+%EC%82%AC%EC%9A%A9%0D%0A%23%5Bderive%28Debug%29%5D%0D%0Astruct+MyStruct+%7B%0D%0A++++data%3A+String%2C%0D%0A%7D%0D%0A%0D%0Afn+print_and_modify%28s%3A+%26mut+MyStruct%29+%7B%0D%0A++++println%21%28%22%5Ct%3E+MyStruct%EB%A5%BC+%EC%B0%B8%EC%A1%B0%3A+%7B%3A%3F%7D%22%2C+s%29%3B%0D%0A++++s.data.push_str%28%22+%EC%88%98%EC%A0%95%EB%90%A8%22%29%3B%0D%0A%7D%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++let+mut+my_struct1+%3D+MyStruct+%7B%0D%0A++++++++data%3A+String%3A%3Afrom%28%22MyStruct1%22%29%2C%0D%0A++++%7D%3B%0D%0A%0D%0A++++let+mut+my_struct2+%3D+MyStruct+%7B%0D%0A++++++++data%3A+String%3A%3Afrom%28%22MyStruct2%22%29%2C%0D%0A++++%7D%3B%0D%0A%0D%0A++++%2F%2F+%EB%B6%88%EB%B3%80+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++println%21%28%22%EB%B6%88%EB%B3%80+%EC%B0%B8%EC%A1%B0%3A+%7B%3A%3F%7D%22%2C+%26my_struct1%29%3B%0D%0A%0D%0A++++%2F%2F+%EA%B0%80%EB%B3%80+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC+%EC%88%98%EC%A0%95%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++print_and_modify%28%26mut+my_struct1%29%3B%0D%0A++++println%21%28%22%EC%88%98%EC%A0%95%EB%90%9C+MyStruct1%3A+%7B%3A%3F%7D%22%2C+my_struct1%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%94%EC%9C%84%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+%EB%B9%8C%EB%A6%BC%EC%9D%98+%EA%B7%9C%EC%B9%99%EC%9D%84+%EB%B3%B4%EC%97%AC%EC%A4%8D%EB%8B%88%EB%8B%A4.%0D%0A++++%7B%0D%0A++++++++let+mut_ref+%3D+%26mut+my_struct2%3B+%2F%2F+%EA%B0%80%EB%B3%80+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++++++print_and_modify%28mut_ref%29%3B+%2F%2F+%EA%B0%80%EB%B3%80+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%ED%95%A8%EC%88%98%EC%97%90+%EC%A0%84%EB%8B%AC%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++++++%2F%2F+%EC%9D%B4+%EC%A7%80%EC%A0%90%EC%97%90%EC%84%9C+mut_ref%EB%A5%BC+%EB%8D%94+%EC%9D%B4%EC%83%81+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%0D%0A++++%7D%0D%0A%0D%0A++++%2F%2F+%EB%B2%94%EC%9C%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%9C+%ED%9B%84%EC%97%90%EB%8A%94+%EC%9B%90%EB%9E%98+%EB%B3%80%EC%88%98%EB%A5%BC+%EB%8B%A4%EC%8B%9C+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0D%0A++++println%21%28%22%EC%88%98%EC%A0%95%EB%90%9C+MyStruct2%3A+%7B%3A%3F%7D%22%2C+my_struct2%29%3B%0D%0A%0D%0A++++%2F%2F+%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%84+%EC%9D%B4%EB%8F%99%EC%8B%9C%ED%82%B5%EB%8B%88%EB%8B%A4.%0D%0A++++let+my_struct3+%3D+MyStruct+%7B%0D%0A++++++++data%3A+String%3A%3Afrom%28%22MyStruct3%22%29%2C%0D%0A++++%7D%3B%0D%0A++++let+my_struct4+%3D+my_struct3%3B+%2F%2F+%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%84+%EC%9D%B4%EB%8F%99%EC%8B%9C%ED%82%B5%EB%8B%88%EB%8B%A4.%0D%0A++++%2F%2F+%EC%9D%B4%EC%A0%9C+my_struct3%EC%9D%80+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%0D%0A++++println%21%28%22%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%B4+%EC%9D%B4%EB%8F%99%EB%90%9C+MyStruct4%3A+%7B%3A%3F%7D%22%2C+my_struct4%29%3B%0D%0A%7D%0D%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 class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> </div> <!-- <script> document.addEventListener("DOMContentLoaded", function() { diff --git a/docs/22_ko.html b/docs/22_ko.html index d32f8d12a0066c562af482355f84d94b723c825e..18d7fceec47d135cf6410ece90c4d9f01b3ad745 100644 --- a/docs/22_ko.html +++ b/docs/22_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,43 +35,28 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>소유권</h1> - <p><strong>Ownership</strong></p> -<p>소유권 정의: Rust에서 각 값은 하나의 소유자를 가지며, 소유자가 범위를 벗어나면 값이 할당 해제됩니다.</p> -<p>소유권 이전 방법을 예제를 통해 설명합니다 (예: 값을 새 변수에 할당하거나 함수에 전달할 때).</p> -<p>값이 범위를 벗어날 때 자동으로 호출되는 drop 함수를 소개합니다.</p> -<p>소유권 정의:</p> -<p>Rust에서는 각 값에 대해 하나의 소유자가 존재하며, 소유자가 해당 값을 관리합니다.</p> -<p>소유자가 범위를 벗어나면 Rust는 자동으로 해당 값의 메모리를 해제합니다.</p> -<p>소유권 이전 예제:</p> -<p>예제 1: 값을 새 변수에 할당할 때</p> -<p>s1이 가리키는 값의 소유권이 s2로 이전되어 s1은 사용할 수 없습니다.</p> -<pre><code class="rust">let s1 = String::from("hello"); -let s2 = s1;</code></pre> -<p>예제 2: 함수에 값을 전달할 때</p> -<p>s가 takes_ownership 함수에 전달되면서 소유권이 이전되고 함수 내에서 값의 메모리가 해제됩니다.</p> -<pre><code class="rust">fn takes_ownership(s: String) { - println!("{}", s); -} - -fn main() { - let s = String::from("hello"); - takes_ownership(s); - // 여기에서 s는 사용할 수 없습니다. -}</code></pre> -<p><code>drop</code> 함수 소개:</p> -<p>Rust에서는 값이 범위를 벗어날 때 자동으로 drop 함수가 호출됩니다.</p> -<p>drop 함수는 메모리를 안전하게 해제하는 역할을 합니다.</p> -<p>이를 통해 개발자가 직접 메모리 해제를 관리할 필요가 없습니다.</p> -<p>소유권, 소유권 이전 방법, 그리고 drop 함수를 통해 Rust는 메모리 관리를 단순화하고 안전하게 할 수 있습니다.</p> -<p>이로 인해 메모리 누수나 세그멘테이션 폴트와 같은 문제를 효과적으로 방지할 수 있습니다.</p> + <h1>소유권과 빌림 검사기</h1> + <p>Rust의 메모리 관리가 소유권, 빌림, 그리고 수명의 개념에 기반한다는 것을 설명합니다.</p> +<p>Rust의 시스템은 가비지 컬렉터가 필요 없이 컴파일 시간에 메모리 관리 문제를 방지하도록 설계되어 있다는 것을 강조합니다.</p> +<ol> +<li>Rust의 메모리 관리 방식 소개:<ol> +<li>Rust는 소유권, 빌림, 그리고 수명을 기반으로 한 메모리 관리 시스템을 도입하여 메모리 안전성을 보장합니다.</li> +<li>이 시스템은 컴파일 시간에 메모리 관리 문제를 확인하고 방지하므로, 런타임 시 메모리 누수나 <code>세그멘테이션 폴트</code>와 같은 문제가 발생하지 않습니다.</li></ol></li> +<li>가비지 컬렉터 없이 메모리 관리 문제 방지:<ol> +<li>Rust의 메모리 관리 시스템은 가비지 컬렉터가 필요 없이 메모리를 안전하게 관리할 수 있게 해줍니다.</li> +<li>소유권과 빌림 규칙을 통해 컴파일러가 메모리 사용에 대한 제약 조건을 검사하고, 문제가 있는 경우 컴파일 오류를 발생시킵니다.</li> +<li>이를 통해 런타임 시 메모리 관리 문제가 발생할 여지가 없도록 합니다.</li></ol></li> +</ol> +<p>이렇게 Rust는 소유권, 빌림, 그리고 수명을 기반으로 하는 메모리 관리 시스템을 통해 가비지 컬렉터 없이도 메모리 안전성을 보장하며,</p> +<p>컴파일 시간에 메모리 관리 문제를 방지하는 방식으로 문제를 해결합니다.</p> +<p>이 시스템은 런타임에 발생할 수 있는 메모리 관련 문제를 최소화하여 성능과 안정성을 높입니다.</p> <div class="bottomnav"> - <span class="back"><a href="21_ko.html" rel="prev">❮ 이전</a></span> + <span class="back"><a href="chapter_2_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="23_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%60drop%60+%ED%95%A8%EC%88%98+%EC%86%8C%EA%B0%9C%3A%0A%2F%2F+Rust%EC%97%90%EC%84%9C%EB%8A%94+%EA%B0%92%EC%9D%B4+%EB%B2%94%EC%9C%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%A0+%EB%95%8C+%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C+drop+%ED%95%A8%EC%88%98%EA%B0%80+%ED%98%B8%EC%B6%9C%EB%90%A9%EB%8B%88%EB%8B%A4.%0A%2F%2F+drop+%ED%95%A8%EC%88%98%EB%8A%94+%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC+%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C+%ED%95%B4%EC%A0%9C%ED%95%98%EB%8A%94+%EC%97%AD%ED%95%A0%EC%9D%84+%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%2F%2F+%EC%9D%B4%EB%A5%BC+%ED%86%B5%ED%95%B4+%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80+%EC%A7%81%EC%A0%91+%EB%A9%94%EB%AA%A8%EB%A6%AC+%ED%95%B4%EC%A0%9C%EB%A5%BC+%EA%B4%80%EB%A6%AC%ED%95%A0+%ED%95%84%EC%9A%94%EA%B0%80+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%0Astruct+CustomStruct+%7B%0A++++data%3A+String%2C%0A%7D%0A%0Aimpl+Drop+for+CustomStruct+%7B%0A++++fn+drop%28%26mut+self%29+%7B%0A++++++++println%21%28%22Dropping+CustomStruct+with+data%3A+%7B%7D%22%2C+self.data%29%3B%0A++++%7D%0A%7D%0A%0Afn+main%28%29+%7B%0A++++let+custom+%3D+CustomStruct+%7B%0A++++++++data%3A+String%3A%3Afrom%28%22hello%22%29%2C%0A++++%7D%3B%0A++++println%21%28%22Created+CustomStruct+with+data%3A+%7B%7D%22%2C+custom.data%29%3B%0A++++%2F%2F+custom%EC%9D%80+%EC%9D%B4+%EC%8A%A4%EC%BD%94%ED%94%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%98%EB%A9%B4%EC%84%9C+drop+%ED%95%A8%EC%88%98%EA%B0%80+%ED%98%B8%EC%B6%9C%EB%90%98%EC%96%B4+%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B0%80+%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C+%ED%95%B4%EC%A0%9C%EB%90%A9%EB%8B%88%EB%8B%A4.%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> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F*%0A%EC%9D%B4+%EC%BD%94%EB%93%9C%EC%97%90%EC%84%9C%2C+%EB%A8%BC%EC%A0%80+%22hello%22+%EA%B0%92%EC%9D%84+%EA%B0%96%EB%8A%94+%EA%B0%80%EB%B3%80+String+%EB%B3%80%EC%88%98+s%EB%A5%BC+%EC%84%A0%EC%96%B8%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%0A%EA%B7%B8%EB%9F%B0+%EB%8B%A4%EC%9D%8C+%26+%EC%97%B0%EC%82%B0%EC%9E%90%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+s%EC%97%90+%EB%8C%80%ED%95%9C+%EB%B6%88%EB%B3%80+%EC%B0%B8%EC%A1%B0+r1%EC%9D%84+%EB%A7%8C%EB%93%AD%EB%8B%88%EB%8B%A4.%0A%0Ar1%EC%9D%80+%EB%B9%8C%EB%A6%BC%28borrowing%29%EC%9D%98+%EC%98%88%EC%8B%9C%EB%A1%9C%2C+s%EC%9D%98+%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%84+%EA%B0%80%EC%A0%B8%EA%B0%80%EC%A7%80+%EC%95%8A%EA%B3%A0+%EA%B7%B8+%EA%B0%92%EC%9D%84+%EC%9D%BD%EC%9D%84+%EC%88%98+%EC%9E%88%EC%A7%80%EB%A7%8C+%EC%88%98%EC%A0%95%ED%95%A0+%EC%88%98%EB%8A%94+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%0Ar1%EC%9D%98+%EA%B0%92%EC%9D%84+%EC%B6%9C%EB%A0%A5%ED%95%9C+%ED%9B%84%2C+r1%EC%9D%B4+%EC%8A%A4%EC%BD%94%ED%94%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%98+%EB%8D%94+%EC%9D%B4%EC%83%81+%EB%B9%8C%EB%A0%A4%EC%A7%80%EC%A7%80+%EC%95%8A%EA%B2%8C+%EB%90%A9%EB%8B%88%EB%8B%A4.%0A%0A%EA%B7%B8%EB%9F%B0+%EB%8B%A4%EC%9D%8C+%26mut+%EC%97%B0%EC%82%B0%EC%9E%90%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+s%EC%97%90+%EB%8C%80%ED%95%9C+%EA%B0%80%EB%B3%80+%EC%B0%B8%EC%A1%B0+r2%EB%A5%BC+%EB%A7%8C%EB%93%AD%EB%8B%88%EB%8B%A4.%0A%0Ar2%EC%9D%80+%EB%98%90+%EB%8B%A4%EB%A5%B8+%EB%B9%8C%EB%A6%BC%EC%9D%98+%EC%98%88%EC%8B%9C%EC%9E%85%EB%8B%88%EB%8B%A4.+%EC%9D%B4%EB%B2%88%EC%97%90%EB%8A%94+s%EB%A5%BC+%EA%B0%80%EB%B3%80%EC%9C%BC%EB%A1%9C+%EB%B9%8C%EB%A0%A4%EC%99%80%EC%84%9C+%EA%B0%92%EC%9D%84+%EC%88%98%EC%A0%95%ED%95%A0+%EC%88%98+%EC%9E%88%EA%B2%8C+%EB%90%A9%EB%8B%88%EB%8B%A4.%0A%0A%EC%9A%B0%EB%A6%AC%EB%8A%94+push_str%28%29+%EB%A9%94%EC%86%8C%EB%93%9C%EB%A5%BC+%ED%86%B5%ED%95%B4+r2%EB%A5%BC+%ED%86%B5%ED%95%B4+%EB%AC%B8%EC%9E%90%EC%97%B4+%22%2C+world%21%22%EB%A5%BC+s%EC%97%90+%EC%B6%94%EA%B0%80%ED%95%98%EA%B3%A0%2C+r2%EC%9D%98+%EA%B0%92%EC%9D%84+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%0A%EB%A7%88%EC%A7%80%EB%A7%89%EC%9C%BC%EB%A1%9C+r2%EA%B0%80+%EC%8A%A4%EC%BD%94%ED%94%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%98+%EB%8D%94+%EC%9D%B4%EC%83%81+%EB%B9%8C%EB%A0%A4%EC%A7%80%EC%A7%80+%EC%95%8A%EA%B2%8C+%EB%90%98%EB%A9%B4%2C+s%EB%8A%94+%EB%8B%A4%EC%8B%9C+%EC%9E%90%EC%9C%A0%EB%A1%AD%EA%B2%8C+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%0A%0A%EC%9D%B4+%EC%BD%94%EB%93%9C+%EC%8A%A4%EB%8B%88%ED%8E%AB%EC%9D%80+Rust%EC%9D%98+%EC%86%8C%EC%9C%A0%EA%B6%8C%EA%B3%BC+%EB%B9%8C%EB%A6%BC+%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%B4+%EA%B0%80%EB%B9%84%EC%A7%80+%EC%BB%AC%EB%A0%89%ED%84%B0+%EC%97%86%EC%9D%B4+%EC%95%88%EC%A0%84%ED%95%98%EA%B3%A0+%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8+%EB%A9%94%EB%AA%A8%EB%A6%AC+%EA%B4%80%EB%A6%AC%EB%A5%BC+%EA%B0%80%EB%8A%A5%ED%95%98%EA%B2%8C+%ED%95%98%EB%8A%94+%EB%B0%A9%EC%8B%9D%EC%9D%84+%EB%B3%B4%EC%97%AC%EC%A4%8D%EB%8B%88%EB%8B%A4.%0A%0ARust%EB%8A%94+%EC%BB%B4%ED%8C%8C%EC%9D%BC+%EC%8B%9C%EA%B0%84%EC%97%90+%EC%86%8C%EC%9C%A0%EA%B6%8C%EA%B3%BC+%EB%B9%8C%EB%A6%BC+%EA%B7%9C%EC%B9%99%EC%9D%84+%EA%B0%95%EC%A0%9C%ED%95%A8%EC%9C%BC%EB%A1%9C%EC%8D%A8%0A%0A%EB%A9%94%EB%AA%A8%EB%A6%AC+%EB%88%84%EC%88%98%EB%82%98+%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98+%ED%8F%B4%ED%8A%B8%EC%99%80+%EA%B0%99%EC%9D%80+%EB%9F%B0%ED%83%80%EC%9E%84+%EC%98%A4%EB%A5%98%EB%A5%BC+%EB%B0%A9%EC%A7%80%ED%95%98%EB%AF%80%EB%A1%9C+Rust+%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%80+%EC%95%88%EC%A0%95%EC%A0%81%EC%9D%B4%EB%A9%B4%EC%84%9C%EB%8F%84+%EB%86%92%EC%9D%80+%EC%84%B1%EB%8A%A5%EC%9D%84+%EB%B3%B4%EC%9E%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A*%2F%0A%0Afn+main%28%29+%7B%0A++++let+mut+s+%3D+String%3A%3Afrom%28%22Hello%22%29%3B%0A%0A++++%7B%0A++++++++let+r1+%3D+%26s%3B+%2F%2F+%EB%B6%88%EB%B3%80+%EB%B9%8C%EB%A6%BC%0A++++++++println%21%28%22%7B%7D%22%2C+r1%29%3B%0A++++%7D+%2F%2F+r1%EC%9D%B4+%EC%8A%A4%EC%BD%94%ED%94%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%A8%0A%0A++++let+r2+%3D+%26mut+s%3B+%2F%2F+%EA%B0%80%EB%B3%80+%EB%B9%8C%EB%A6%BC%0A++++r2.push_str%28%22%2C+world%21%22%29%3B%0A++++println%21%28%22%7B%7D%22%2C+r2%29%3B%0A%7D+%2F%2F+r2%EA%B0%80+%EC%8A%A4%EC%BD%94%ED%94%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%A8%2C+s%EB%8A%94+%EB%8D%94+%EC%9D%B4%EC%83%81+%EB%B9%8C%EB%A0%A4%EC%A7%80%EC%A7%80+%EC%95%8A%EC%9D%8C%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> <!-- <script> diff --git a/docs/23_ko.html b/docs/23_ko.html index ecfc1671f89d92954f2531205a49bc99a5cc2abb..0d85e05b01d5a12f5ab8bc79a635dbe3a44325fc 100644 --- a/docs/23_ko.html +++ b/docs/23_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,14 +35,44 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>빌림</h1> - <p><strong>Borrowing</strong></p> + <h1>소유권</h1> + <p><strong>Ownership</strong></p> +<p>소유권 정의: Rust에서 각 값은 하나의 소유자를 가지며, 소유자가 범위를 벗어나면 값이 할당 해제됩니다.</p> +<p>소유권 이전 방법을 예제를 통해 설명합니다 (예: 값을 새 변수에 할당하거나 함수에 전달할 때).</p> +<p>값이 범위를 벗어날 때 자동으로 호출되는 drop 함수를 소개합니다.</p> +<p>소유권 정의:</p> +<p>Rust에서는 각 값에 대해 하나의 소유자가 존재하며, 소유자가 해당 값을 관리합니다.</p> +<p>소유자가 범위를 벗어나면 Rust는 자동으로 해당 값의 메모리를 해제합니다.</p> +<p>소유권 이전 예제:</p> +<p>예제 1: 값을 새 변수에 할당할 때</p> +<p>s1이 가리키는 값의 소유권이 s2로 이전되어 s1은 사용할 수 없습니다.</p> +<pre><code class="rust">let s1 = String::from("hello"); +let s2 = s1;</code></pre> +<p>예제 2: 함수에 값을 전달할 때</p> +<p>s가 takes_ownership 함수에 전달되면서 소유권이 이전되고 함수 내에서 값의 메모리가 해제됩니다.</p> +<pre><code class="rust">fn takes_ownership(s: String) { + println!("{}", s); +} + +fn main() { + let s = String::from("hello"); + takes_ownership(s); + // 여기에서 s는 사용할 수 없습니다. +}</code></pre> +<p><code>drop</code> 함수 소개:</p> +<p>Rust에서는 값이 범위를 벗어날 때 자동으로 drop 함수가 호출됩니다.</p> +<p>drop 함수는 메모리를 안전하게 해제하는 역할을 합니다.</p> +<p>이를 통해 개발자가 직접 메모리 해제를 관리할 필요가 없습니다.</p> +<p>소유권, 소유권 이전 방법, 그리고 drop 함수를 통해 Rust는 메모리 관리를 단순화하고 안전하게 할 수 있습니다.</p> +<p>이로 인해 메모리 누수나 세그멘테이션 폴트와 같은 문제를 효과적으로 방지할 수 있습니다.</p> <div class="bottomnav"> <span class="back"><a href="22_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="24_ko.html" rel="next">다음 ❯</a></span> </div> </div> - <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> + <div class="code"> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%60drop%60+%ED%95%A8%EC%88%98+%EC%86%8C%EA%B0%9C%3A%0A%2F%2F+Rust%EC%97%90%EC%84%9C%EB%8A%94+%EA%B0%92%EC%9D%B4+%EB%B2%94%EC%9C%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%A0+%EB%95%8C+%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C+drop+%ED%95%A8%EC%88%98%EA%B0%80+%ED%98%B8%EC%B6%9C%EB%90%A9%EB%8B%88%EB%8B%A4.%0A%2F%2F+drop+%ED%95%A8%EC%88%98%EB%8A%94+%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC+%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C+%ED%95%B4%EC%A0%9C%ED%95%98%EB%8A%94+%EC%97%AD%ED%95%A0%EC%9D%84+%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%2F%2F+%EC%9D%B4%EB%A5%BC+%ED%86%B5%ED%95%B4+%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80+%EC%A7%81%EC%A0%91+%EB%A9%94%EB%AA%A8%EB%A6%AC+%ED%95%B4%EC%A0%9C%EB%A5%BC+%EA%B4%80%EB%A6%AC%ED%95%A0+%ED%95%84%EC%9A%94%EA%B0%80+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%0Astruct+CustomStruct+%7B%0A++++data%3A+String%2C%0A%7D%0A%0Aimpl+Drop+for+CustomStruct+%7B%0A++++fn+drop%28%26mut+self%29+%7B%0A++++++++println%21%28%22Dropping+CustomStruct+with+data%3A+%7B%7D%22%2C+self.data%29%3B%0A++++%7D%0A%7D%0A%0Afn+main%28%29+%7B%0A++++let+custom+%3D+CustomStruct+%7B%0A++++++++data%3A+String%3A%3Afrom%28%22hello%22%29%2C%0A++++%7D%3B%0A++++println%21%28%22Created+CustomStruct+with+data%3A+%7B%7D%22%2C+custom.data%29%3B%0A++++%2F%2F+custom%EC%9D%80+%EC%9D%B4+%EC%8A%A4%EC%BD%94%ED%94%84%EB%A5%BC+%EB%B2%97%EC%96%B4%EB%82%98%EB%A9%B4%EC%84%9C+drop+%ED%95%A8%EC%88%98%EA%B0%80+%ED%98%B8%EC%B6%9C%EB%90%98%EC%96%B4+%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B0%80+%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C+%ED%95%B4%EC%A0%9C%EB%90%A9%EB%8B%88%EB%8B%A4.%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> <!-- <script> document.addEventListener("DOMContentLoaded", function() { diff --git a/docs/24_ko.html b/docs/24_ko.html index 0faada8ffb6da7500b8f5297a12b221c28360b1b..a87216f39ba7ddecfcb207577ae9bc43d8171746 100644 --- a/docs/24_ko.html +++ b/docs/24_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,45 +35,14 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>수명</h1> - <p><strong>Lifetime</strong></p> -<p>참조와 그들이 빌리는 값 사이의 관계를 나타내기 위해 수명이 사용됩니다.</p> -<p>여기선 함수 시그니처와 구조체에서 수명을 어떻게 표시하는지 보여줍니다.</p> -<p>수명은 주로 빌림 검사기가 메모리 안전성을 보장하기 위한 도구로 사용되며, 컴파일러에 의해 자주 자동으로 추론된다는 것을 강조합니다.</p> -<p>수명이란 무엇인가:</p> -<p>수명은 참조와 빌려진 값 사이의 관계를 표현하는데 사용됩니다.</p> -<p>수명은 참조가 유효한 기간 동안 해당 값이 메모리에서 해제되지 않도록 보장합니다.</p> -<p>함수 시그니처와 구조체에서의 수명 표시:</p> -<p>예제 1: 함수 시그니처에서 수명 표시</p> -<pre><code class="rust">// 여기에서 사용된 'a는 수명을 나타내는 표시입니다. -// 이를 통해 입력과 출력의 참조들이 동일한 수명을 가지도록 합니다. -fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str { - if s1.len() > s2.len() { - s1 - } else { - s2 - } -}</code></pre> -<p>예제 2: 구조체에서 수명 표시</p> -<pre><code class="rust">// Person 구조체는 이름을 문자열 슬라이스로 저장합니다. -// 여기에서 사용된 'a는 구조체의 이름 필드가 참조하는 문자열 슬라이스의 수명을 나타냅니다. -struct Person<'a> { - name: &'a str, -}</code></pre> -<p>수명과 빌림 검사기:</p> -<p>수명은 빌림 검사기가 참조가 유효한 기간 동안 값이 메모리에서 해제되지 않도록 보장하는 데 사용됩니다.</p> -<p>대부분의 경우, 컴파일러는 수명을 자동으로 추론할 수 있습니다.</p> -<p>그러나 복잡한 상황에서는 개발자가 수명을 명시해야 할 수도 있습니다.</p> -<p>수명을 이해하고 올바르게 사용함으로써 Rust의 빌림 검사기가 메모리 관리를 안전하게 수행할 수 있도록 지원할 수 있습니다.</p> -<p>이는 Rust 프로그램의 성능과 안정성에 크게 기여합니다.</p> + <h1>빌림</h1> + <p><strong>Borrowing</strong></p> <div class="bottomnav"> <span class="back"><a href="23_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="25_ko.html" rel="next">다음 ❯</a></span> </div> </div> - <div class="code"> - <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EA%B5%AC%EC%A1%B0%EC%B2%B4+%EC%A0%95%EC%9D%98%0A%2F%2F+%EB%91%90+%EA%B0%9C%EC%9D%98+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%EA%B0%80%EC%A7%80%EB%8A%94+%EA%B5%AC%EC%A1%B0%EC%B2%B4%EB%A5%BC+%EB%A7%8C%EB%93%AD%EB%8B%88%EB%8B%A4.+%EA%B0%81+%EC%B0%B8%EC%A1%B0%EB%8A%94+%EB%8B%A4%EB%A5%B8+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EC%9D%84+%EA%B0%80%EC%A7%91%EB%8B%88%EB%8B%A4.%0Astruct+TwoRefs%3C%27a%2C+%27b%3E+%7B%0A++++ref_a%3A+%26%27a+str%2C%0A++++ref_b%3A+%26%27b+str%2C%0A%7D%0A%0A%2F%2F+%ED%95%A8%EC%88%98+%EC%A0%95%EC%9D%98%0A%2F%2F+%EB%91%90+%EA%B0%9C%EC%9D%98+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EC%9D%84+%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%EC%9E%85%EB%8B%88%EB%8B%A4.%0A%2F%2F+%EC%9E%85%EB%A0%A5+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98+%EA%B8%B8%EC%9D%B4%EC%97%90+%EB%94%B0%EB%9D%BC+%EB%91%90+%EB%AC%B8%EC%9E%90%EC%97%B4+%EC%A4%91+%ED%95%98%EB%82%98%EB%A5%BC+%EB%B0%98%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%2F%2F+%27b%3A+%27a%EB%A1%9C+%EB%91%90+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84+%EA%B0%84%EC%9D%98+%EA%B4%80%EA%B3%84%EB%A5%BC+%EC%84%A4%EC%A0%95%ED%95%B4%EC%84%9C%0A%2F%2F+%27b+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EC%9D%80+%27a+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EB%B3%B4%EB%8B%A4+%EA%B8%B8%EA%B1%B0%EB%82%98+%EA%B0%99%EC%95%84%EC%95%BC+%ED%95%A9%EB%8B%88%EB%8B%A4.%0Afn+choose_str%3C%27a%2C+%27b%3A+%27a%3E%28str_a%3A+%26%27a+str%2C+str_b%3A+%26%27b+str%29+-%3E+%26%27a+str+%7B%0A++++if+str_a.len%28%29+%3E+str_b.len%28%29+%7B%0A++++++++str_a%0A++++%7D+else+%7B%0A++++++++str_b%0A++++%7D%0A%7D%0A%0Afn+main%28%29+%7B%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4+%EC%83%9D%EC%84%B1%0A++++let+a+%3D+String%3A%3Afrom%28%22%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.%22%29%3B%0A++++let+b+%3D+String%3A%3Afrom%28%22%EB%B0%98%EA%B0%91%EC%8A%B5%EB%8B%88%EB%8B%A4.%22%29%3B%0A%0A++++%7B%0A++++++++%2F%2F+%EB%91%90+%EA%B0%9C%EC%9D%98+%EC%84%9C%EB%A1%9C+%EB%8B%A4%EB%A5%B8+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EC%9D%84+%EA%B0%80%EC%A7%84+%EA%B5%AC%EC%A1%B0%EC%B2%B4+%EC%83%9D%EC%84%B1%0A++++++++let+c+%3D+%22%EC%97%AC%EA%B8%B0%EC%84%9C+%EB%A7%8C%EB%82%98%EC%84%9C+%EB%B0%98%EA%B0%80%EC%9B%8C%EC%9A%94%21%22%3B%0A++++++++let+two_refs+%3D+TwoRefs+%7B%0A++++++++++++ref_a%3A+%26a%2C%0A++++++++++++ref_b%3A+%26c%2C%0A++++++++%7D%3B%0A%0A++++++++%2F%2F+%ED%95%A8%EC%88%98+%ED%98%B8%EC%B6%9C%0A++++++++let+longest_str+%3D+choose_str%28two_refs.ref_a%2C+two_refs.ref_b%29%3B%0A++++++++println%21%28%22%EA%B0%80%EC%9E%A5+%EA%B8%B4+%EB%AC%B8%EC%9E%90%EC%97%B4%3A+%7B%7D%22%2C+longest_str%29%3B%0A++++%7D%0A%0A++++%2F%2F+%EC%97%AC%EA%B8%B0%EC%84%9C+two_refs%EB%8A%94+%EC%82%AC%EB%9D%BC%EC%A7%80%EA%B3%A0%2C+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84+%27a%EC%99%80+%27b%EB%8A%94+%EB%8D%94+%EC%9D%B4%EC%83%81+%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80+%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4.%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 class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> </div> <!-- <script> document.addEventListener("DOMContentLoaded", function() { diff --git a/docs/25_ko.html b/docs/25_ko.html index 954421525208d78b238f72f86e457f8b9e7c8a8f..9d9bc694ed4e01a478a661cd95c9262079a09496 100644 --- a/docs/25_ko.html +++ b/docs/25_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,33 +35,45 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>빌림</h1> - <p><strong>Borrow checker</strong></p> -<p>빌림 검사기가 컴파일 시간에 빌림 규칙을 적용하여 메모리 안전성을 보장하는 방법을 설명합니다.</p> -<p>빌림 검사기는 코드 내 참조의 수명을 분석함으로써 작동한다는 것을 설명합니다.</p> -<p>빌림 검사기가 컴파일 시간에 메모리 관리 오류를 포착하는 방법을 예제를 통해 보여줍니다.</p> -<p>빌림 검사기가 컴파일 시간에 빌림 규칙을 적용하는 방법 설명:</p> -<p>Rust의 빌림 검사기는 컴파일 시간에 참조 규칙을 적용하여 메모리 안전성을 보장합니다.</p> -<p>이를 통해 런타임에 발생할 수 있는 메모리 누수, 데이터 경쟁 등의 문제를 사전에 방지할 수 있습니다.</p> -<p>빌림 검사기가 코드 내 참조의 수명을 분석하는 방법 설명:</p> -<p>빌림 검사기는 함수, 구조체 및 코드 내에서 참조의 수명을 추적하고 분석합니다.</p> -<p>이를 통해, 참조의 수명이 끝난 이후에도 사용되거나, 다른 참조가 유효하지 않은 상태에서 접근하는 것을 방지합니다.</p> -<p>빌림 검사기가 컴파일 시간에 메모리 관리 오류를 포착하는 예제:</p> -<pre><code class="rust">fn main() { - let mut x = 5; - let y = &mut x; - let z = &x; - println!("x: {}, y: {}, z: {}", x, y, z); + <h1>수명</h1> + <p><strong>Lifetime</strong></p> +<p>참조와 그들이 빌리는 값 사이의 관계를 나타내기 위해 수명이 사용됩니다.</p> +<p>여기선 함수 시그니처와 구조체에서 수명을 어떻게 표시하는지 보여줍니다.</p> +<p>수명은 주로 빌림 검사기가 메모리 안전성을 보장하기 위한 도구로 사용되며, 컴파일러에 의해 자주 자동으로 추론된다는 것을 강조합니다.</p> +<p>수명이란 무엇인가:</p> +<p>수명은 참조와 빌려진 값 사이의 관계를 표현하는데 사용됩니다.</p> +<p>수명은 참조가 유효한 기간 동안 해당 값이 메모리에서 해제되지 않도록 보장합니다.</p> +<p>함수 시그니처와 구조체에서의 수명 표시:</p> +<p>예제 1: 함수 시그니처에서 수명 표시</p> +<pre><code class="rust">// 여기에서 사용된 'a는 수명을 나타내는 표시입니다. +// 이를 통해 입력과 출력의 참조들이 동일한 수명을 가지도록 합니다. +fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str { + if s1.len() > s2.len() { + s1 + } else { + s2 + } }</code></pre> -<ul> -<li>위 코드는 컴파일 시간에 오류를 발생시킵니다. - 빌림 검사기는 x가 변경 가능한 참조와 불변 참조가 동시에 존재하는 것을 감지합니다. - 빌림 검사기의 오류 메시지를 통해 개발자는 문제가 발생한 원인을 파악하고 코드를 수정할 수 있습니다.</li> -</ul> +<p>예제 2: 구조체에서 수명 표시</p> +<pre><code class="rust">// Person 구조체는 이름을 문자열 슬라이스로 저장합니다. +// 여기에서 사용된 'a는 구조체의 이름 필드가 참조하는 문자열 슬라이스의 수명을 나타냅니다. +struct Person<'a> { + name: &'a str, +}</code></pre> +<p>수명과 빌림 검사기:</p> +<p>수명은 빌림 검사기가 참조가 유효한 기간 동안 값이 메모리에서 해제되지 않도록 보장하는 데 사용됩니다.</p> +<p>대부분의 경우, 컴파일러는 수명을 자동으로 추론할 수 있습니다.</p> +<p>그러나 복잡한 상황에서는 개발자가 수명을 명시해야 할 수도 있습니다.</p> +<p>수명을 이해하고 올바르게 사용함으로써 Rust의 빌림 검사기가 메모리 관리를 안전하게 수행할 수 있도록 지원할 수 있습니다.</p> +<p>이는 Rust 프로그램의 성능과 안정성에 크게 기여합니다.</p> <div class="bottomnav"> <span class="back"><a href="24_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="26_ko.html" rel="next">다음 ❯</a></span> </div> </div> - <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> + <div class="code"> + <iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EA%B5%AC%EC%A1%B0%EC%B2%B4+%EC%A0%95%EC%9D%98%0A%2F%2F+%EB%91%90+%EA%B0%9C%EC%9D%98+%EC%B0%B8%EC%A1%B0%EB%A5%BC+%EA%B0%80%EC%A7%80%EB%8A%94+%EA%B5%AC%EC%A1%B0%EC%B2%B4%EB%A5%BC+%EB%A7%8C%EB%93%AD%EB%8B%88%EB%8B%A4.+%EA%B0%81+%EC%B0%B8%EC%A1%B0%EB%8A%94+%EB%8B%A4%EB%A5%B8+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EC%9D%84+%EA%B0%80%EC%A7%91%EB%8B%88%EB%8B%A4.%0Astruct+TwoRefs%3C%27a%2C+%27b%3E+%7B%0A++++ref_a%3A+%26%27a+str%2C%0A++++ref_b%3A+%26%27b+str%2C%0A%7D%0A%0A%2F%2F+%ED%95%A8%EC%88%98+%EC%A0%95%EC%9D%98%0A%2F%2F+%EB%91%90+%EA%B0%9C%EC%9D%98+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EC%9D%84+%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%EC%9E%85%EB%8B%88%EB%8B%A4.%0A%2F%2F+%EC%9E%85%EB%A0%A5+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98+%EA%B8%B8%EC%9D%B4%EC%97%90+%EB%94%B0%EB%9D%BC+%EB%91%90+%EB%AC%B8%EC%9E%90%EC%97%B4+%EC%A4%91+%ED%95%98%EB%82%98%EB%A5%BC+%EB%B0%98%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4.%0A%2F%2F+%27b%3A+%27a%EB%A1%9C+%EB%91%90+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84+%EA%B0%84%EC%9D%98+%EA%B4%80%EA%B3%84%EB%A5%BC+%EC%84%A4%EC%A0%95%ED%95%B4%EC%84%9C%0A%2F%2F+%27b+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EC%9D%80+%27a+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EB%B3%B4%EB%8B%A4+%EA%B8%B8%EA%B1%B0%EB%82%98+%EA%B0%99%EC%95%84%EC%95%BC+%ED%95%A9%EB%8B%88%EB%8B%A4.%0Afn+choose_str%3C%27a%2C+%27b%3A+%27a%3E%28str_a%3A+%26%27a+str%2C+str_b%3A+%26%27b+str%29+-%3E+%26%27a+str+%7B%0A++++if+str_a.len%28%29+%3E+str_b.len%28%29+%7B%0A++++++++str_a%0A++++%7D+else+%7B%0A++++++++str_b%0A++++%7D%0A%7D%0A%0Afn+main%28%29+%7B%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4+%EC%83%9D%EC%84%B1%0A++++let+a+%3D+String%3A%3Afrom%28%22%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.%22%29%3B%0A++++let+b+%3D+String%3A%3Afrom%28%22%EB%B0%98%EA%B0%91%EC%8A%B5%EB%8B%88%EB%8B%A4.%22%29%3B%0A%0A++++%7B%0A++++++++%2F%2F+%EB%91%90+%EA%B0%9C%EC%9D%98+%EC%84%9C%EB%A1%9C+%EB%8B%A4%EB%A5%B8+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84%EC%9D%84+%EA%B0%80%EC%A7%84+%EA%B5%AC%EC%A1%B0%EC%B2%B4+%EC%83%9D%EC%84%B1%0A++++++++let+c+%3D+%22%EC%97%AC%EA%B8%B0%EC%84%9C+%EB%A7%8C%EB%82%98%EC%84%9C+%EB%B0%98%EA%B0%80%EC%9B%8C%EC%9A%94%21%22%3B%0A++++++++let+two_refs+%3D+TwoRefs+%7B%0A++++++++++++ref_a%3A+%26a%2C%0A++++++++++++ref_b%3A+%26c%2C%0A++++++++%7D%3B%0A%0A++++++++%2F%2F+%ED%95%A8%EC%88%98+%ED%98%B8%EC%B6%9C%0A++++++++let+longest_str+%3D+choose_str%28two_refs.ref_a%2C+two_refs.ref_b%29%3B%0A++++++++println%21%28%22%EA%B0%80%EC%9E%A5+%EA%B8%B4+%EB%AC%B8%EC%9E%90%EC%97%B4%3A+%7B%7D%22%2C+longest_str%29%3B%0A++++%7D%0A%0A++++%2F%2F+%EC%97%AC%EA%B8%B0%EC%84%9C+two_refs%EB%8A%94+%EC%82%AC%EB%9D%BC%EC%A7%80%EA%B3%A0%2C+%EB%9D%BC%EC%9D%B4%ED%94%84%ED%83%80%EC%9E%84+%27a%EC%99%80+%27b%EB%8A%94+%EB%8D%94+%EC%9D%B4%EC%83%81+%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80+%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4.%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> <!-- <script> document.addEventListener("DOMContentLoaded", function() { diff --git a/docs/26_ko.html b/docs/26_ko.html index 4f4a453978549e859ef8e176972966dd1300da2d..b9f97b6ce32d21a5c893d9ed4bf9aaaa159113b2 100644 --- a/docs/26_ko.html +++ b/docs/26_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,11 +35,30 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>소유권</h1> - <p>gff</p> + <h1>빌림</h1> + <p><strong>Borrow checker</strong></p> +<p>빌림 검사기가 컴파일 시간에 빌림 규칙을 적용하여 메모리 안전성을 보장하는 방법을 설명합니다.</p> +<p>빌림 검사기는 코드 내 참조의 수명을 분석함으로써 작동한다는 것을 설명합니다.</p> +<p>빌림 검사기가 컴파일 시간에 메모리 관리 오류를 포착하는 방법을 예제를 통해 보여줍니다.</p> +<p>빌림 검사기가 컴파일 시간에 빌림 규칙을 적용하는 방법 설명:</p> +<p>Rust의 빌림 검사기는 컴파일 시간에 참조 규칙을 적용하여 메모리 안전성을 보장합니다.</p> +<p>이를 통해 런타임에 발생할 수 있는 메모리 누수, 데이터 경쟁 등의 문제를 사전에 방지할 수 있습니다.</p> +<p>빌림 검사기가 코드 내 참조의 수명을 분석하는 방법 설명:</p> +<p>빌림 검사기는 함수, 구조체 및 코드 내에서 참조의 수명을 추적하고 분석합니다.</p> +<p>이를 통해, 참조의 수명이 끝난 이후에도 사용되거나, 다른 참조가 유효하지 않은 상태에서 접근하는 것을 방지합니다.</p> +<p>빌림 검사기가 컴파일 시간에 메모리 관리 오류를 포착하는 예제:</p> +<pre><code class="rust">fn main() { + let mut x = 5; + let y = &mut x; + let z = &x; + println!("x: {}, y: {}, z: {}", x, y, z); +}</code></pre> +<ul> +<li>위 코드는 컴파일 시간에 오류를 발생시킵니다. - 빌림 검사기는 x가 변경 가능한 참조와 불변 참조가 동시에 존재하는 것을 감지합니다. - 빌림 검사기의 오류 메시지를 통해 개발자는 문제가 발생한 원인을 파악하고 코드를 수정할 수 있습니다.</li> +</ul> <div class="bottomnav"> <span class="back"><a href="25_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="chapter_3_ko.html" rel="next">다음 ❯</a></span> + <span class="next"><a href="27_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> diff --git a/docs/27_ko.html b/docs/27_ko.html index 3dbc0b414a6cd7125a2036fe4ccc90d854517a88..e3488208818cb6ecadfc69e58bb25983c137fce6 100644 --- a/docs/27_ko.html +++ b/docs/27_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1" + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -35,14 +35,14 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Hey</h1> - <p>CSW</p> + <h1>소유권</h1> + <p>gff</p> <div class="bottomnav"> - <span class="back"><a href="chapter_5_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="chapter_6_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="26_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="chapter_3_ko.html" rel="next">다음 ❯</a></span> </div> </div> - <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> + <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> </div> <!-- <script> document.addEventListener("DOMContentLoaded", function() { diff --git a/docs/29_ko.html b/docs/29_ko.html index b3edb7e5e4e4743725253491900b0367ff63b2ee..bbca51e041bf7b2c2a5688137c2f84b5c79ed632 100644 --- a/docs/29_ko.html +++ b/docs/29_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1" + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -38,8 +38,8 @@ <h1>Hey</h1> <p>CSW</p> <div class="bottomnav"> - <span class="back"><a href="chapter_6_ko.html" rel="prev">❮ 이전</a></span> - + <span class="back"><a href="chapter_3_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="chapter_4_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> diff --git a/docs/31_ko.html b/docs/31_ko.html new file mode 100644 index 0000000000000000000000000000000000000000..daededda7c66fa820a17e1f219539b5aefe96c01 --- /dev/null +++ b/docs/31_ko.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> + <html lang="ko"> + <head> + <title>Rust 튜토리얼 - 자기주도프로젝트</title> + + <meta charset="UTF-8"> + <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> + <meta content="utf-8" http-equiv="encoding"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> + <meta name="keywords" content="Rust, Programming, Learning"> + <meta name="description" content="Rust tutorial website based on tour_of_rust"> + <meta name="theme-color" content="#ff6801"/> + <meta http-equiv="Cache-Control" content="max-age=3600"> + + <link rel="stylesheet" href="tour.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/night-owl.min.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css"> + + <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> + <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> + <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> + <link rel="/manifest" href="./site.webmanifest"> + + <script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script> + + <script src="./tour.js" defer></script> + <!-- <script>hljs.highlightAll();</script> --> + <script src="./highlight.badge.min.js"></script> + </head> + <body> + <div class="tour"> + <div class="header"> + <span class="title"><a href="index.html">Rust 튜토리얼</a></span> + <span class="nav"> + <span class="toc"><a href="TOC_ko.html">목차</a></span> + </div> + <div class="page"> + <h1>Hey</h1> + <p>CSW</p> + <div class="bottomnav"> + <span class="back"><a href="chapter_4_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="chapter_5_ko.html" rel="next">다음 ❯</a></span> + </div> + </div> + <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> + </div> + <!-- <script> + document.addEventListener("DOMContentLoaded", function() { + // Select the widget's text element using its XPath + const xpath = '/html/body/main/div/div/div[1]/div[1]/div/button[1]/div'; + const widgetText = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + + // Change the text content of the element + widgetText.textContent = "New Text"; + }); + </script> --> + + <script> + var pres = document.querySelectorAll("pre>code"); + for (var i = 0; i < pres.length; i++) { + hljs.highlightElement(pres[i]); + } + var options = { + loadDelay: 0, + copyIconClass: "far fa-clipboard", + checkIconClass: "fa fa-check text-success", + blogURL: "http://rust-study.ajousw.kr/" + }; + window.highlightJsBadge(options); + </script> + + <footer> + <p>아주대학교 Software Tool Time - Rust 튜토리얼 (Basic)</p> + </footer> + </body> +</html> \ No newline at end of file diff --git a/docs/33_ko.html b/docs/33_ko.html new file mode 100644 index 0000000000000000000000000000000000000000..164c26e7672ba3fb86fd0a7eefc56be3901f17c0 --- /dev/null +++ b/docs/33_ko.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> + <html lang="ko"> + <head> + <title>Rust 튜토리얼 - 자기주도프로젝트</title> + + <meta charset="UTF-8"> + <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> + <meta content="utf-8" http-equiv="encoding"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> + <meta name="keywords" content="Rust, Programming, Learning"> + <meta name="description" content="Rust tutorial website based on tour_of_rust"> + <meta name="theme-color" content="#ff6801"/> + <meta http-equiv="Cache-Control" content="max-age=3600"> + + <link rel="stylesheet" href="tour.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/night-owl.min.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css"> + + <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> + <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> + <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> + <link rel="/manifest" href="./site.webmanifest"> + + <script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script> + + <script src="./tour.js" defer></script> + <!-- <script>hljs.highlightAll();</script> --> + <script src="./highlight.badge.min.js"></script> + </head> + <body> + <div class="tour"> + <div class="header"> + <span class="title"><a href="index.html">Rust 튜토리얼</a></span> + <span class="nav"> + <span class="toc"><a href="TOC_ko.html">목차</a></span> + </div> + <div class="page"> + <h1>Hey</h1> + <p>CSW</p> + <div class="bottomnav"> + <span class="back"><a href="chapter_5_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="chapter_6_ko.html" rel="next">다음 ❯</a></span> + </div> + </div> + <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> + </div> + <!-- <script> + document.addEventListener("DOMContentLoaded", function() { + // Select the widget's text element using its XPath + const xpath = '/html/body/main/div/div/div[1]/div[1]/div/button[1]/div'; + const widgetText = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + + // Change the text content of the element + widgetText.textContent = "New Text"; + }); + </script> --> + + <script> + var pres = document.querySelectorAll("pre>code"); + for (var i = 0; i < pres.length; i++) { + hljs.highlightElement(pres[i]); + } + var options = { + loadDelay: 0, + copyIconClass: "far fa-clipboard", + checkIconClass: "fa fa-check text-success", + blogURL: "http://rust-study.ajousw.kr/" + }; + window.highlightJsBadge(options); + </script> + + <footer> + <p>아주대학교 Software Tool Time - Rust 튜토리얼 (Basic)</p> + </footer> + </body> +</html> \ No newline at end of file diff --git a/docs/35_ko.html b/docs/35_ko.html new file mode 100644 index 0000000000000000000000000000000000000000..1a22c4a42f36b8b5c4c53c231a8db1b41afb83f6 --- /dev/null +++ b/docs/35_ko.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> + <html lang="ko"> + <head> + <title>Rust 튜토리얼 - 자기주도프로젝트</title> + + <meta charset="UTF-8"> + <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> + <meta content="utf-8" http-equiv="encoding"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> + <meta name="keywords" content="Rust, Programming, Learning"> + <meta name="description" content="Rust tutorial website based on tour_of_rust"> + <meta name="theme-color" content="#ff6801"/> + <meta http-equiv="Cache-Control" content="max-age=3600"> + + <link rel="stylesheet" href="tour.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/night-owl.min.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.1/css/all.min.css"> + + <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> + <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> + <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> + <link rel="/manifest" href="./site.webmanifest"> + + <script src="//unpkg.com/@highlightjs/cdn-assets@11.7.0/highlight.min.js"></script> + + <script src="./tour.js" defer></script> + <!-- <script>hljs.highlightAll();</script> --> + <script src="./highlight.badge.min.js"></script> + </head> + <body> + <div class="tour"> + <div class="header"> + <span class="title"><a href="index.html">Rust 튜토리얼</a></span> + <span class="nav"> + <span class="toc"><a href="TOC_ko.html">목차</a></span> + </div> + <div class="page"> + <h1>Hey</h1> + <p>CSW</p> + <div class="bottomnav"> + <span class="back"><a href="chapter_6_ko.html" rel="prev">❮ 이전</a></span> + + </div> + </div> + <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> + </div> + <!-- <script> + document.addEventListener("DOMContentLoaded", function() { + // Select the widget's text element using its XPath + const xpath = '/html/body/main/div/div/div[1]/div[1]/div/button[1]/div'; + const widgetText = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + + // Change the text content of the element + widgetText.textContent = "New Text"; + }); + </script> --> + + <script> + var pres = document.querySelectorAll("pre>code"); + for (var i = 0; i < pres.length; i++) { + hljs.highlightElement(pres[i]); + } + var options = { + loadDelay: 0, + copyIconClass: "far fa-clipboard", + checkIconClass: "fa fa-check text-success", + blogURL: "http://rust-study.ajousw.kr/" + }; + window.highlightJsBadge(options); + </script> + + <footer> + <p>아주대학교 Software Tool Time - Rust 튜토리얼 (Basic)</p> + </footer> + </body> +</html> \ No newline at end of file diff --git a/docs/TOC_ko.html b/docs/TOC_ko.html index 989b2709903cc0dcc089b76e3ac9c413b2621139..535bcff3051f96e1d900c7232b228514d746d671 100644 --- a/docs/TOC_ko.html +++ b/docs/TOC_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -40,38 +40,39 @@ <li><a href="index.html">Hello World!</a></li> <li><a href="01_ko.html">Rust 언어 소개</a></li> <li><a href="02_ko.html">Rust 언어 소개 cont'd</a></li> -<li><a href="03_ko.html">Rust 언어 설치</a></li> -<li><a href="04_ko.html">Chapter 0 - 마무리</a></li> +<li><a href="03_ko.html">Rust 언어 소개 cont'd 2</a></li> +<li><a href="04_ko.html">Rust 언어 설치</a></li> +<li><a href="05_ko.html">Chapter 0 - 마무리</a></li> </ul><h3><a href="chapter_1_ko.html">Chapter 1 - The Basics</a></h3><ul> -<li><a href="06_ko.html">The Rust Playground</a></li> -<li><a href="07_ko.html">변수</a></li> -<li><a href="08_ko.html">변수 업데이트</a></li> -<li><a href="09_ko.html">기본 타입</a></li> -<li><a href="10_ko.html">Basic Type Conversion</a></li> -<li><a href="11_ko.html">Constants</a></li> -<li><a href="12_ko.html">Arrays</a></li> -<li><a href="13_ko.html">Functions</a></li> -<li><a href="14_ko.html">Multiple Return Values</a></li> -<li><a href="15_ko.html">match</a></li> -<li><a href="16_ko.html">Struct and Enum</a></li> -<li><a href="17_ko.html">Returning Nothing</a></li> -<li><a href="18_ko.html">Error handling</a></li> -<li><a href="19_ko.html">Chapter 1 - 마무리</a></li> +<li><a href="07_ko.html">The Rust Playground</a></li> +<li><a href="08_ko.html">변수</a></li> +<li><a href="09_ko.html">변수 업데이트</a></li> +<li><a href="10_ko.html">기본 타입</a></li> +<li><a href="11_ko.html">Basic Type Conversion</a></li> +<li><a href="12_ko.html">Constants</a></li> +<li><a href="13_ko.html">Arrays</a></li> +<li><a href="14_ko.html">Functions</a></li> +<li><a href="15_ko.html">Multiple Return Values</a></li> +<li><a href="16_ko.html">match</a></li> +<li><a href="17_ko.html">Struct and Enum</a></li> +<li><a href="18_ko.html">Returning Nothing</a></li> +<li><a href="19_ko.html">Error handling</a></li> +<li><a href="20_ko.html">Chapter 1 - 마무리</a></li> </ul><h3><a href="chapter_2_ko.html">Chapter 2 - Ownership</a></h3><ul> -<li><a href="21_ko.html">소유권과 빌림 검사기</a></li> -<li><a href="22_ko.html">소유권</a></li> -<li><a href="23_ko.html">빌림</a></li> -<li><a href="24_ko.html">수명</a></li> -<li><a href="25_ko.html">빌림</a></li> -<li><a href="26_ko.html">소유권</a></li> +<li><a href="22_ko.html">소유권과 빌림 검사기</a></li> +<li><a href="23_ko.html">소유권</a></li> +<li><a href="24_ko.html">빌림</a></li> +<li><a href="25_ko.html">수명</a></li> +<li><a href="26_ko.html">빌림</a></li> +<li><a href="27_ko.html">소유권</a></li> </ul><h3><a href="chapter_3_ko.html">Chapter 3 - Generic, Trait</a></h3><ul> -<li><a href="28_ko.html">Hey</a></li> +<li><a href="29_ko.html">Hey</a></li> </ul><h3><a href="chapter_4_ko.html">Chapter 4 - Advanced</a></h3><ul> -<li><a href="30_ko.html">Hey</a></li> +<li><a href="31_ko.html">Hey</a></li> </ul><h3><a href="chapter_5_ko.html">Chapter 5 - Module</a></h3><ul> -<li><a href="32_ko.html">Hey</a></li> +<li><a href="33_ko.html">Hey</a></li> </ul><h3><a href="chapter_6_ko.html">Chapter 6 - Web Framework</a></h3><ul> -<li><a href="34_ko.html">Hey</a></li> +<li><a href="35_ko.html">Hey</a></li> </ul> </div> <div style="display: flex;flex-direction: column;justify-content: center;align-items: center;"> diff --git a/docs/chapter_1_ko.html b/docs/chapter_1_ko.html index 958ab60f4e49bb70346363f3a72ed0240ff90210..b19b1504828184251a01fa3487c48351338f6b60 100644 --- a/docs/chapter_1_ko.html +++ b/docs/chapter_1_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -41,8 +41,8 @@ <pre><code class="rust">let ferris = crab!()</code></pre> <p>또한 Rust를 사용하거나, 기여하거나 관심이 있는 사람들을 <strong>Rustacean</strong>[러스테이션] 라고 부릅니다.</p> <div class="bottomnav"> - <span class="back"><a href="04_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="06_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="05_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="07_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div> diff --git a/docs/chapter_2_ko.html b/docs/chapter_2_ko.html index 207ca9b95119a08895c70376bac8fc574bd8c555..d12a856988fe862004210ddc21aef79d53928256 100644 --- a/docs/chapter_2_ko.html +++ b/docs/chapter_2_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -57,8 +57,8 @@ <p>이러한 문제들에 대한 해결책으로 Rust는 소유권, 빌림, 그리고 수명을 기반으로 한 메모리 관리 시스템을 도입하였습니다.<br /> 이를 통해 컴파일 시간에 메모리 안전성을 보장하며, 가비지 컬렉터의 성능 오버헤드를 피할 수 있습니다.</p> <div class="bottomnav"> - <span class="back"><a href="19_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="21_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="20_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="22_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"><center><img src="/ferris.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> diff --git a/docs/chapter_3_ko.html b/docs/chapter_3_ko.html index 9276b4dd94bcdc7b2732adc2bafb174a12854c9c..067f608926d8c6af87b35549e9258541619e03b5 100644 --- a/docs/chapter_3_ko.html +++ b/docs/chapter_3_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -38,8 +38,8 @@ <h1>Chapter 3 - Generic, Trait</h1> <p>OOP</p> <div class="bottomnav"> - <span class="back"><a href="26_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="28_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="27_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="29_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> diff --git a/docs/chapter_4_ko.html b/docs/chapter_4_ko.html index 1356b80b97feb9b5216bdf9ed99bee0831a639a0..3064a7a7c1409046ac5751e582f2b6a6d704fa2c 100644 --- a/docs/chapter_4_ko.html +++ b/docs/chapter_4_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -38,8 +38,8 @@ <h1>Chapter 4 - Advanced</h1> <p>Concurrency, Macro, Unsafe</p> <div class="bottomnav"> - <span class="back"><a href="28_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="30_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="29_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="31_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> diff --git a/docs/chapter_5_ko.html b/docs/chapter_5_ko.html index 6a5ee51c6811a18efb9a4fb012b9cae715356a55..8455b8c1b714d1d7a7a59b15c8e90eb4da23ebb9 100644 --- a/docs/chapter_5_ko.html +++ b/docs/chapter_5_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -39,8 +39,8 @@ <p>모듈 사용</p> <p>간단한 모듈 제작 및 업로드</p> <div class="bottomnav"> - <span class="back"><a href="30_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="32_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="31_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="33_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> diff --git a/docs/chapter_6_ko.html b/docs/chapter_6_ko.html index d66dff04e8828d31d7d715a81079d36063d072e8..9e0a9799dba76a5602187e07d27d5b5e7308cd90 100644 --- a/docs/chapter_6_ko.html +++ b/docs/chapter_6_ko.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> @@ -39,8 +39,8 @@ <p>웹 프레임워크 actix-rs 소개</p> <p>간단 카카오톡 챗봇 제작</p> <div class="bottomnav"> - <span class="back"><a href="32_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="34_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="33_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="35_ko.html" rel="next">다음 ❯</a></span> </div> </div> <div class="code"><center><img src="/ajou.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> diff --git a/docs/index.html b/docs/index.html index 11f34f61b55bf78c9bd9627502067212d43cc678..2fe0219ede0db090a7c8bde59af12c27f1a2dd74 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,7 +6,7 @@ <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> diff --git a/frontend/README.md b/frontend/README.md index 22d1f2fc0abd1bac4e336ac9e7cb8c335819545b..b30e4348213fafe16e95f94706395f0c96c5d07a 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,3 +1,19 @@ # Rust Tutorial Frontend -자기주도프로젝트 최석원 \ No newline at end of file +자기주도프로젝트 최석원 + +* READ + +**Mac** users need to run this command before downloading: + +```bash +sudo spctl --master-disable +``` + +**Linux** users need to run this command before downloading: + +```bash +sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev +``` + +**Full Changelog**: https://github.com/Hi-Rust/hi-rust.github.io/commits/v1.0.0 \ No newline at end of file diff --git a/frontend/generate.js b/frontend/generate.js index ee0d417cb9371cd32bff8a5214a797d409ca2b7b..28161a9bcbe7f6d4a6f3d854fca664279a5d174d 100644 --- a/frontend/generate.js +++ b/frontend/generate.js @@ -109,7 +109,7 @@ const getHead = (words, lang) => `<!DOCTYPE html> <meta charset="UTF-8"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="utf-8" http-equiv="encoding"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="keywords" content="Rust, Programming, Learning"> <meta name="description" content="Rust tutorial website based on tour_of_rust"> <meta name="theme-color" content="#ff6801"/> diff --git a/frontend/lessons/ko/chapter_0.yaml b/frontend/lessons/ko/chapter_0.yaml index f66216931bd091fa7cf83518637d5ca727320ebe..e23c823158484d419d0fc92a23eeaa64100505b2 100644 --- a/frontend/lessons/ko/chapter_0.yaml +++ b/frontend/lessons/ko/chapter_0.yaml @@ -105,24 +105,40 @@ </div> 이제 Rust 팬처럼만 이야기 하지 말고 Rust 언어가 전체적으로 어떻게 작동하는지 자세히 알아보겠습니다. +- title: >- + Rust 언어 소개 cont'd 2 + code: >- + https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EC%99%B8%EB%B6%80+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4.%0D%0Aextern+crate+image%3B%0D%0A%0D%0A%2F%2F+%ED%95%84%EC%9A%94%ED%95%9C+%EB%AA%A8%EB%93%88%EC%9D%84+%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4.%0D%0Ause+image%3A%3A%7BGenericImageView%2C+ImageFormat%2C+ImageOutputFormat%7D%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EC%9D%B4%EB%AF%B8%EC%A7%80+%ED%8C%8C%EC%9D%BC%EC%9D%84+%EC%97%BD%EB%8B%88%EB%8B%A4.%0D%0A++++let+img+%3D+image%3A%3Aopen%28%22input.jpg%22%29.unwrap%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%9D%98+%ED%81%AC%EA%B8%B0%EB%A5%BC+%EB%B3%80%EA%B2%BD%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++let+resized_img+%3D+img.resize%28100%2C+100%2C+image%3A%3Aimageops%3A%3AFilterType%3A%3ANearest%29%3B%0D%0A%0D%0A++++%2F%2F+%EC%83%88+%EC%9D%B4%EB%AF%B8%EC%A7%80+%ED%8C%8C%EC%9D%BC%EC%9D%84+%EC%A0%80%EC%9E%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0D%0A++++let+mut+output+%3D+std%3A%3Afs%3A%3AFile%3A%3Acreate%28%22output.jpg%22%29.unwrap%28%29%3B%0D%0A++++resized_img%0D%0A++++++++.write_to%28%26mut+output%2C+ImageOutputFormat%3A%3AJpeg%2875%29%29%0D%0A++++++++.unwrap%28%29%3B%0D%0A%0D%0A++++println%21%28%22%EC%9D%B4%EB%AF%B8%EC%A7%80+%ED%81%AC%EA%B8%B0+%EB%B3%80%EA%B2%BD%EC%9D%B4+%EC%99%84%EB%A3%8C%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22%29%3B%0D%0A%7D%0D%0A + content_markdown: | + Rust는 메모리 안정성, 스레드 안전성, 그리고 코드 가독성을 중요하게 생각하는 프로그래밍 언어입니다. - --- + `가비지 컬렉션`(GC, 예를 들어 Java ZGC)이나 런타임 오버헤드 없이 메모리를 안전하게 관리할 수 있는 기능을 제공하며, + + 이로 인해 최신 컴퓨팅 환경에서 매우 유용한 언어로 각광받고 있습니다. + + Rust의 고유한 메모리 관리 방식 덕분에 빠르고, 안정적이며, 효율적인 소프트웨어를 작성할 수 있습니다. + + Rust는 `객체 지향` 프로그래밍을 지원하지만, 전통적인 객체 지향 언어와는 다른 방식으로 구현합니다. + + Rust는 `"트레잇(trait)"`이라는 개념을 도입하여 객체 지향 프로그래밍의 특징을 제공하고 있습니다. + + 트레잇을 통해 다형성을 구현할 수 있으며, 연산자 오버로딩을 지원하여 객체 지향적인 코드를 작성할 수 있습니다. - `Rust`는 메모리 안정성, 스레드 안전성, 코드 가독성 등을 강조하는 언어입니다. + 암묵적인 타입 변환은 지원하지 않아, 코드의 안정성과 명확성을 높입니다. - `가비지 컬렉션이나 런타임 오버헤드 없이` 메모리를 안전하게 보호할 수 있어 최신 컴퓨팅에서 매우 유용합니다. + 또한, Rust는 C와 같은 다른 언어와 직접적으로 상호작용할 수 있는 - 이러한 기능 덕분에 Rust는 빠르고 안정적이며 효율적인 소프트웨어를 작성하는 데 완벽한 언어입니다. + Foreign Function Interface(`FFI`)를 제공하여, 다양한 언어와의 호환성을 높입니다. - 객체 지향 프로그래밍을 지원하지만, 이를 구현하는 방식이 다릅니다. + Rust는 `LLVM` 컴파일러 인프라스트럭처 프로젝트와 연계되어 개발되었습니다. - "트레잇(trait)"이라는 개념을 사용하여 `객체 지향 프로그래밍`을 구현하고 `연산자 오버로딩을 지원`하며, 이를 통해 객체 지향적인 코드를 작성할 수 있습니다. + LLVM을 사용하여 코드를 컴파일하고 최적화하므로, 빠른 실행 속도를 보장할 수 있습니다. - `암묵적인 타입 변환`을 지원하지 않습니다. Rust에서는 `C와 직접적으로 상호작용`할 수 있는 Foreign Function Interface(FFI)가 제공됩니다. + 더불어, Rust는 npm과 같은 `패키지 매니저`인 Cargo를 내장하여 의존성 관리와 빌드 자동화를 지원합니다. - Rust는 LLVM(컴파일러 인프라스트럭처) 프로젝트의 일부로 개발되어 `LLVM`을 사용하여 코드를 컴파일하고 최적화하여 빠른 실행 속도를 제공합니다. + Cargo를 통해 다른 개발자들이 작성한 Rust 라이브러리를 쉽게 사용하고 관리할 수 있습니다. - Rust는 또한 npm처럼 `패키지 매니저 Cargo`를 내장해 의존성 관리와 빌드 자동화를 지원합니다. + 이처럼 Rust의 특징들을 이해하고 활용하면, 다양한 상황에서 안전하고 효율적인 소프트웨어 개발이 가능해집니다. <div align="center"> <p> diff --git a/nohup.out b/nohup.out new file mode 100644 index 0000000000000000000000000000000000000000..843c6ce54762602111c8d512d8d6d15f55e10dc7 --- /dev/null +++ b/nohup.out @@ -0,0 +1,7 @@ +[2023-03-22T11:02:20.007Z] info code-server 4.10.1 d477972c68fc8c8e8d610aa7287db87ba90e55c7 +[2023-03-22T11:02:20.008Z] info Using user-data-dir ~/.local/share/code-server +[2023-03-22T11:02:20.018Z] info Using config file ~/.config/code-server/config.yaml +[2023-03-22T11:02:20.018Z] info HTTP server listening on http://0.0.0.0:8081/ +[2023-03-22T11:02:20.018Z] info - Authentication is enabled +[2023-03-22T11:02:20.018Z] info - Using password from ~/.config/code-server/config.yaml +[2023-03-22T11:02:20.018Z] info - Not serving HTTPS