diff --git a/docs/05_ko.html b/docs/05_ko.html index ed9a4df04e764c72263c2593663f7d966eb08b7b..f4202c8d7019fcc9de0d52741dcd3fe4aadd4799 100644 --- a/docs/05_ko.html +++ b/docs/05_ko.html @@ -37,17 +37,15 @@ <div class="page"> <h1>Chapter 0 - 마무리</h1> <p>Rust 소스코드는 <code>.rs</code> 확장자를 가집니다.</p> -<pre><code class="rust language-rust">fn main() { +<pre><code class="rust">fn main() { println!("Hello, world!"); -} -</code></pre> +}</code></pre> <p>위 코드는 가장 간단한 Rust 프로그램입니다.</p> <p>main 함수를 정의하고, println! 매크로를 사용하여 "Hello, world!"를 출력하도록 되어 있습니다.</p> <p>위 코드를 hello.rs라는 이름으로 저장한 뒤, 터미널에서 다음과 같은 명령어를 입력해보세요.</p> -<pre><code class="bash language-bash">$ rustc hello.rs +<pre><code class="bash">$ rustc hello.rs $ ./hello -$ Hello, world! (stdout) -</code></pre> +$ 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> diff --git a/docs/17_ko.html b/docs/17_ko.html index 85e54d51c91ce06d1f48fa135d72eea0c8d3d296..39886de2ef9bb8f2bda7acbfa96311941d42dd35 100644 --- a/docs/17_ko.html +++ b/docs/17_ko.html @@ -42,11 +42,11 @@ <p>함수 이름은 항상 <code>snake_case</code>로 지정됩니다.</p> <p>힌트: 함수를 정의하는 경우, 해당 함수가 수신하는 데이터를 매개변수 (parameter)라고합니다.<br /> 그 함수를 호출하고 데이터를 전달하면 인수(argument)라고합니다.</p> -<pre><code class="python language-python"># 파이썬으로 보면 -def add(x: int, y: int) -> int: +<pre><code class="python"># 파이썬으로 보면 +def add(x: int, y: int) -> int: return x + y -def subtract(x: int, y: int) -> int: +def subtract(x: int, y: int) -> int: return x - y def main(): @@ -55,8 +55,7 @@ def main(): if __name__ == "__main__": - main() -</code></pre> + main()</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> diff --git a/docs/33_ko.html b/docs/33_ko.html index 6c45a7223f54d84d61b743c4e85ed0ea08d28ef0..7af36bd82f0e3338161d7102e9831b43ae7ef49b 100644 --- a/docs/33_ko.html +++ b/docs/33_ko.html @@ -63,7 +63,9 @@ vec1[0] = 20; // 첫 번째 요소를 20으로 변경</code></pre> <pre><code class="rust">let slice = &vec2[1..3]; // 인덱스 1부터 2까지의 슬라이스 생성</code></pre> <h2 id="e">e. 벡터 크기 조절 및 용량 관리</h2> <p>벡터의 크기를 조절하거나 용량을 관리하려면 다음과 같은 메서드를 사용합니다.</p> -<pre><code class="rust">vec1.reserve(10); // 최소한 10개 요소를 저장할 수 있는 공간을 확보 vec1.shrink_to_fit(); // 벡터의 용량을 최소한으로 줄이기 vec1.resize(5, 0); // 벡터 크기를 5로 조절하고, 새로운 요소를 0으로 초기화</code></pre> +<pre><code class="rust">vec1.reserve(10); // 최소한 10개 요소를 저장할 수 있는 공간을 확보 +vec1.shrink_to_fit(); // 벡터의 용량을 최소한으로 줄이기 +vec1.resize(5, 0); // 벡터 크기를 5로 조절하고, 새로운 요소를 0으로 초기화</code></pre> <h2 id="f">f. 고급 벡터 사용법</h2> <p>벡터의 고급 사용법에는 벡터에서 요소를 제거하거나 벡터의 일부를 다른 벡터로 이동하는 등의 작업이 포함됩니다.</p> <pre><code class="rust">// 벡터에서 인덱스 i의 요소 제거 @@ -80,7 +82,7 @@ if let Some(last_element) = vec1.pop() { </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+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%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=fn+main%28%29+%7B%0A++++%2F%2F+%EB%B9%88+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0A++++let+mut+vec1%3A+Vec%3Ci32%3E+%3D+Vec%3A%3Anew%28%29%3B%0A%0A++++%2F%2F+%EC%B4%88%EA%B8%B0+%EA%B0%92%EC%9D%B4+%EC%9E%88%EB%8A%94+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0A++++let+vec2+%3D+vec%21%5B1%2C+2%2C+3%2C+4%2C+5%5D%3B%0A++++%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%97%90%EC%84%9C+%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%B4+%EC%9A%94%EC%86%8C%EC%97%90+%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0%0A++++let+first_element+%3D+vec2%5B0%5D%3B+%2F%2F+%EC%B2%AB+%EB%B2%88%EC%A7%B8+%EC%9A%94%EC%86%8C%0A%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%97%90%EC%84%9C+%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%B4+%EC%9A%94%EC%86%8C%EB%A5%BC+%EC%88%98%EC%A0%95%ED%95%98%EA%B8%B0%0A++++vec1.push%2810%29%3B+%2F%2F+%EB%B2%A1%ED%84%B0+%EB%81%9D%EC%97%90+10+%EC%B6%94%EA%B0%80%0A++++vec1%5B0%5D+%3D+20%3B+%2F%2F+%EC%B2%AB+%EB%B2%88%EC%A7%B8+%EC%9A%94%EC%86%8C%EB%A5%BC+20%EC%9C%BC%EB%A1%9C+%EB%B3%80%EA%B2%BD%0A++++%0A++++for+element+in+vec2.iter%28%29+%7B%0A++++++++println%21%28%22%EC%9A%94%EC%86%8C%3A+%7B%7D%22%2C+element%29%3B%0A++++%7D%0A++++%0A++++let+slice+%3D+%26vec2%5B1..3%5D%3B+%2F%2F+%EC%9D%B8%EB%8D%B1%EC%8A%A4+1%EB%B6%80%ED%84%B0+2%EA%B9%8C%EC%A7%80%EC%9D%98+%EC%8A%AC%EB%9D%BC%EC%9D%B4%EC%8A%A4+%EC%83%9D%EC%84%B1%0A++++println%21%28%22%7Bslice%3A%23%3F%7D%22%29%3B%0A++++%0A++++vec1.reserve%2810%29%3B+%2F%2F+%EC%B5%9C%EC%86%8C%ED%95%9C+10%EA%B0%9C+%EC%9A%94%EC%86%8C%EB%A5%BC+%EC%A0%80%EC%9E%A5%ED%95%A0+%EC%88%98+%EC%9E%88%EB%8A%94+%EA%B3%B5%EA%B0%84%EC%9D%84+%ED%99%95%EB%B3%B4%0A++++println%21%28%22Vector+%EC%88%98%EC%9A%A9%EB%9F%89%3A+%7B%7D%22%2C+vec1.capacity%28%29%29%3B%0A++++vec1.shrink_to_fit%28%29%3B+%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%A9%EB%9F%89%EC%9D%84+%EC%B5%9C%EC%86%8C%ED%95%9C%EC%9C%BC%EB%A1%9C+%EC%A4%84%EC%9D%B4%EA%B8%B0%0A++++println%21%28%22Vector+%EC%88%98%EC%9A%A9%EB%9F%89%3A+%7B%7D%22%2C+vec1.capacity%28%29%29%3B%0A++++vec1.resize%285%2C+0%29%3B+%2F%2F+%EB%B2%A1%ED%84%B0+%ED%81%AC%EA%B8%B0%EB%A5%BC+5%EB%A1%9C+%EC%A1%B0%EC%A0%88%ED%95%98%EA%B3%A0%2C+%EC%83%88%EB%A1%9C%EC%9A%B4+%EC%9A%94%EC%86%8C%EB%A5%BC+0%EC%9C%BC%EB%A1%9C+%EC%B4%88%EA%B8%B0%ED%99%94%0A++++println%21%28%22Vector+%EC%88%98%EC%9A%A9%EB%9F%89%3A+%7B%7D%22%2C+vec1.capacity%28%29%29%3B%0A++++%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%97%90%EC%84%9C+%EC%9D%B8%EB%8D%B1%EC%8A%A4+i%EC%9D%98+%EC%9A%94%EC%86%8C+%EC%A0%9C%EA%B1%B0%0A++++let+i+%3D+2%3B%0A++++vec1.remove%28i%29%3B%0A%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%97%90%EC%84%9C+%EB%A7%88%EC%A7%80%EB%A7%89+%EC%9A%94%EC%86%8C%EB%A5%BC+%EA%BA%BC%EB%82%B4%EA%B8%B0%0A++++if+let+Some%28last_element%29+%3D+vec1.pop%28%29+%7B%0A++++++++println%21%28%22%EB%A7%88%EC%A7%80%EB%A7%89+%EC%9A%94%EC%86%8C%3A+%7B%7D%22%2C+last_element%29%3B%0A++++%7D%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/34_ko.html b/docs/34_ko.html index 86e3373b4a1b1186827e0871202f5fbbc55ca5f1..2c12dbfccf364df19490c77f9d6755b8e5709d09 100644 --- a/docs/34_ko.html +++ b/docs/34_ko.html @@ -83,7 +83,7 @@ println!("대문자로 변경된 벡터: {:?}", uppercased_vec);</code></pre> </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+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%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=fn+main%28%29+%7B%0A++++let+vec+%3D+vec%21%5B1%2C+2%2C+3%2C+4%2C+5%5D%3B%0A++++println%21%28%22%EB%B3%80%EA%B2%BD+%EC%A0%84+%EB%B2%A1%ED%84%B0%3A+%7B%3A%3F%7D%22%2C+vec%29%3B%0A%0A++++for+element+in+vec.iter%28%29+%7B%0A++++++++println%21%28%22%EC%9A%94%EC%86%8C%3A+%7B%7D%22%2C+element%29%3B%0A++++%7D%0A%0A++++let+mut+vec+%3D+vec%21%5B1%2C+2%2C+3%2C+4%2C+5%5D%3B%0A%0A++++for+element+in+vec.iter_mut%28%29+%7B%0A++++++++*element+*%3D+2%3B+%2F%2F+%EA%B0%81+%EC%9A%94%EC%86%8C%EC%97%90+2%EB%A5%BC+%EA%B3%B1%ED%95%A8%0A++++%7D%0A++++%0A++++println%21%28%22%EB%B3%80%EA%B2%BD%EB%90%9C+%EB%B2%A1%ED%84%B0%3A+%7B%3A%3F%7D%22%2C+vec%29%3B%0A%0A++++let+vec+%3D+vec%21%5B%22a%22.to_string%28%29%2C+%22b%22.to_string%28%29%2C+%22c%22.to_string%28%29%5D%3B%0A%0A++++let+mut+uppercased_vec%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0A%0A++++for+element+in+vec.into_iter%28%29+%7B%0A++++++++uppercased_vec.push%28element.to_uppercase%28%29%29%3B%0A++++%7D%0A++++%0A++++%2F%2F+vec%EC%9D%98+%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%B4+%EB%84%98%EC%96%B4%EA%B0%80%EC%84%9C+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4%0A++++println%21%28%22%EB%8C%80%EB%AC%B8%EC%9E%90%EB%A1%9C+%EB%B3%80%EA%B2%BD%EB%90%9C+%EB%B2%A1%ED%84%B0%3A+%7B%3A%3F%7D%22%2C+uppercased_vec%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/36_ko.html b/docs/36_ko.html index fff2c94a10a91a386682ece3345bf1fc16c9f9a3..6f36d69f36e45b69f390aa67ea25d6215c223463 100644 --- a/docs/36_ko.html +++ b/docs/36_ko.html @@ -74,7 +74,7 @@ println!("Doubled numbers: {:?}", doubled_numbers);</code></pre> </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+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%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=struct+MyNumbers+%7B%0A++++numbers%3A+Vec%3Ci32%3E%2C%0A%7D%0A%0A%2F%2F+Iterator+for+%60iter%28%29%60%0Astruct+MyNumbersIter%3C%27a%3E+%7B%0A++++inner%3A+std%3A%3Aslice%3A%3AIter%3C%27a%2C+i32%3E%2C%0A%7D%0A%0Aimpl%3C%27a%3E+Iterator+for+MyNumbersIter%3C%27a%3E+%7B%0A++++type+Item+%3D+%26%27a+i32%3B%0A%0A++++fn+next%28%26mut+self%29+-%3E+Option%3CSelf%3A%3AItem%3E+%7B%0A++++++++self.inner.next%28%29%0A++++%7D%0A%7D%0A%0A%2F%2F+Iterator+for+%60iter_mut%28%29%60%0Astruct+MyNumbersIterMut%3C%27a%3E+%7B%0A++++inner%3A+std%3A%3Aslice%3A%3AIterMut%3C%27a%2C+i32%3E%2C%0A%7D%0A%0Aimpl%3C%27a%3E+Iterator+for+MyNumbersIterMut%3C%27a%3E+%7B%0A++++type+Item+%3D+%26%27a+mut+i32%3B%0A%0A++++fn+next%28%26mut+self%29+-%3E+Option%3CSelf%3A%3AItem%3E+%7B%0A++++++++self.inner.next%28%29%0A++++%7D%0A%7D%0A%0A%2F%2F+Iterator+for+%60into_iter%28%29%60%0Astruct+MyNumbersIntoIter+%7B%0A++++inner%3A+std%3A%3Avec%3A%3AIntoIter%3Ci32%3E%2C%0A%7D%0A%0Aimpl+Iterator+for+MyNumbersIntoIter+%7B%0A++++type+Item+%3D+i32%3B%0A%0A++++fn+next%28%26mut+self%29+-%3E+Option%3CSelf%3A%3AItem%3E+%7B%0A++++++++self.inner.next%28%29%0A++++%7D%0A%7D%0A%0Aimpl+MyNumbers+%7B%0A++++fn+iter%28%26self%29+-%3E+MyNumbersIter+%7B%0A++++++++MyNumbersIter+%7B%0A++++++++++++inner%3A+self.numbers.iter%28%29%2C%0A++++++++%7D%0A++++%7D%0A%0A++++fn+iter_mut%28%26mut+self%29+-%3E+MyNumbersIterMut+%7B%0A++++++++MyNumbersIterMut+%7B%0A++++++++++++inner%3A+self.numbers.iter_mut%28%29%2C%0A++++++++%7D%0A++++%7D%0A%7D%0A%0Aimpl+IntoIterator+for+MyNumbers+%7B%0A++++type+Item+%3D+i32%3B%0A++++type+IntoIter+%3D+MyNumbersIntoIter%3B%0A%0A++++fn+into_iter%28self%29+-%3E+Self%3A%3AIntoIter+%7B%0A++++++++MyNumbersIntoIter+%7B%0A++++++++++++inner%3A+self.numbers.into_iter%28%29%2C%0A++++++++%7D%0A++++%7D%0A%7D%0A%0Aimpl%3C%27a%3E+IntoIterator+for+%26%27a+MyNumbers+%7B%0A++++type+Item+%3D+%26%27a+i32%3B%0A++++type+IntoIter+%3D+MyNumbersIter%3C%27a%3E%3B%0A%0A++++fn+into_iter%28self%29+-%3E+Self%3A%3AIntoIter+%7B%0A++++++++self.iter%28%29%0A++++%7D%0A%7D%0A%0Aimpl%3C%27a%3E+IntoIterator+for+%26%27a+mut+MyNumbers+%7B%0A++++type+Item+%3D+%26%27a+mut+i32%3B%0A++++type+IntoIter+%3D+MyNumbersIterMut%3C%27a%3E%3B%0A%0A++++fn+into_iter%28self%29+-%3E+Self%3A%3AIntoIter+%7B%0A++++++++self.iter_mut%28%29%0A++++%7D%0A%7D%0A%0A%0Afn+main%28%29+%7B%0A++++let+my+%3D+MyNumbers+%7B+numbers%3A+vec%21%5B1%2C2%2C3%2C4%2C5%5D+%7D%3B%0A++++%0A++++%2F%2F+%EB%82%B4%EA%B0%80+%EB%A7%8C%EB%93%A0+Itertaor%0A++++for+a+in+my.iter%28%29+%7B%0A++++++++println%21%28%22a+%7Ba%7D%22%29%3B%0A++++%7D%0A++++%0A++++let+data+%3D+vec%21%5B1%2C+2%2C+3%2C+4%2C+5%2C+6%5D%3B%0A++++let+filtered_data%3A+Vec%3C_%3E+%3D+data.into_iter%28%29.filter%28%7Cx%7C+x+%25+2+%3D%3D+0%29.collect%28%29%3B%0A++++println%21%28%22Filtered%3A+%7B%3A%23%3F%7D%22%2C+filtered_data%29%3B+%2F%2F+Debug+Format+%EC%B6%9C%EB%A0%A5%0A%0A++++%0A++++let+items+%3D+vec%21%5B%22apple%22%2C+%22banana%22%2C+%22orange%22%5D%3B%0A%0A++++%2F%2F+%EB%AC%B4%ED%95%9C+Iterator%0A++++let+cycle_iter+%3D+items.into_iter%28%29.cycle%28%29%3B%0A%0A++++%2F%2F+Create+an+infinite+iterator+of+incrementing+numbers+starting+from+1%0A++++let+count_iter+%3D+1..%3B%0A%0A++++%2F%2F+Zip+the+two+iterators+to+create+pairs%0A++++let+result_iter+%3D+cycle_iter.zip%28count_iter%29%3B%0A%0A++++%2F%2F+Take+the+first+10+pairs+and+print+them%0A++++for+%28item%2C+count%29+in+result_iter.take%2810%29+%7B%0A++++++++println%21%28%22%7B%7D%3A+%7B%7D%22%2C+count%2C+item%29%3B%0A++++%7D%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/44_ko.html b/docs/44_ko.html index 92162c6e6a2ea4e8c4d2fe1b833d92b61d67a4ca..8c44cdda3b8d7f622abf6e14d24f4e09e8393781 100644 --- a/docs/44_ko.html +++ b/docs/44_ko.html @@ -35,14 +35,45 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Hey</h1> - <p>CSW</p> + <h1>cargo command</h1> + <h1 id="">의존성 관리</h1> +<h3 id="cargotoml">Cargo.toml 파일을 사용한 외부 패키지 의존성 추가</h3> +<p><code>Cargo.toml</code> 파일을 사용하여 프로젝트에 외부 패키지 의존성을 추가할 수 있습니다.</p> +<p><code>[dependencies]</code> 섹션에 패키지 이름과 원하는 버전을 기록하면 됩니다.</p> +<p>예를 들어, <code>serde</code> 패키지를 추가하려면 다음과 같이 <code>Cargo.toml</code> 파일에 기록합니다. (cargo add serde)</p> +<pre><code class="toml">[dependencies] +serde = "1.0" </code></pre> +<p>이렇게 하면 Cargo는 프로젝트를 빌드할 때 자동으로 <code>serde</code> 패키지를 다운로드하고 컴파일하여 프로젝트와 함께 사용할 수 있게 합니다.</p> +<p><a href="https://github.com/Alfex4936/Rust-Server/blob/main/chatbot/Cargo.toml" target="_blank" rel="noopener">@아주대학교 챗봇의 Cargo.tmol</a></p> +<h3 id="-1">의존성 업데이트와 관리 방법</h3> +<p><code>cargo update</code> 명령어를 사용하면 프로젝트의 의존성을 최신 상태로 업데이트할 수 있습니다.</p> +<p>이 명령어는 <code>Cargo.lock</code> 파일에 기록된 의존성 버전을 업데이트하며, 프로젝트 빌드 시 새로운 의존성 버전이 사용됩니다.</p> +<pre><code class="bash">cargo update</code></pre> +<h1 id="-2">빌드 및 실행</h1> +<h3 id="cargo">cargo 명령어를 사용한 프로젝트 빌드와 실행 방법</h3> +<p><code>cargo build</code> 명령어를 사용하여 프로젝트를 빌드할 수 있습니다.</p> +<p>이 명령어는 프로젝트와 그 의존성을 컴파일하고 빌드 결과물을 <code>target</code> 폴더에 저장합니다. (target/debug 폴더에 바이너리)</p> +<pre><code class="bash">cargo build</code></pre> +<p><code>cargo run</code> 명령어를 사용하면 프로젝트를 빌드한 후 바로 실행할 수 있습니다. (단축은 r)</p> +<p>이 명령어는 <code>cargo build</code>와 동일한 빌드 과정을 거친 후 생성된 실행 파일을 호출합니다.</p> +<pre><code class="bash">cargo r</code></pre> +<h3 id="-3">릴리즈 빌드와 디버그 빌드의 차이</h3> +<p>Cargo는 기본적으로 디버그 빌드를 수행합니다.</p> +<p>디버그 빌드는 최적화되지 않은 상태로 컴파일되며, 디버깅 정보가 포함됩니다.</p> +<p>따라서 실행 속도는 느리지만 디버깅을 용이하게 합니다.</p> +<p>릴리즈 빌드는 최적화를 적용하여 더 빠른 실행 속도를 가지지만, 디버깅 정보가 포함되지 않습니다.</p> +<p>프로덕션 환경에 배포하기 전에 릴리즈 빌드를 사용하는 것이 좋습니다.</p> +<p>릴리즈 빌드를 수행하려면 <code>--release</code> 플래그를 사용하세요. (target/release 폴더에 바이너리)</p> +<pre><code class="bash">cargo build -r</code></pre> +<h1 id="-4">정보</h1> +<p>cargo korea 처럼 원하는 cargo subcommand를 만들기 위해서는</p> +<p>cargo-korea 프로젝트로 이름을 만들어서 배포하면 됩니다. <a href="https://choiseokwon.tistory.com/376" target="_blank" rel="noopener">@만드는 법 참고</a></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="next"><a href="45_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="/ferris_lofi.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> </div> <script> var pres = document.querySelectorAll("pre>code"); diff --git a/docs/45_ko.html b/docs/45_ko.html new file mode 100644 index 0000000000000000000000000000000000000000..cd72b652156d9e0a0ffa9367c9fd37cc2bd91185 --- /dev/null +++ b/docs/45_ko.html @@ -0,0 +1,111 @@ +<!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 by 최석원"> + <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>cargo command</h1> + <h1 id="">테스트 작성 및 실행</h1> +<h2 id="cargotest">cargo test 명령어를 사용한 테스트 코드 실행 방법</h2> +<p><code>cargo test</code> 명령어를 사용하여 프로젝트의 테스트 코드를 실행할 수 있습니다.</p> +<p>이 명령어는 프로젝트와 그 의존성을 컴파일한 후, 프로젝트 내의 모든 테스트 함수를 실행합니다.</p> +<pre><code class="sh">cargo test</code></pre> +<h2 id="-1">테스트 코드 작성 가이드</h2> +<p>테스트 코드는 <code>#[test]</code> 속성을 사용하여 작성할 수 있습니다.</p> +<p>일반적으로 테스트 함수는 프로젝트의 <code>src</code> 폴더와 같은 경로에 위치한 <code>tests</code> 폴더 내에 작성됩니다.</p> +<p>다음은 간단한 테스트 함수 예제입니다.</p> +<pre><code class="rust">#[cfg(test)] +mod tests { + #[test] + fn it_works() { + assert_eq!(2 + 2, 4); + } +}</code></pre> +<h1 id="cratesio">Crates.io 소개</h1> +<h2 id="rust">Rust의 패키지 저장소 및 사용 방법</h2> +<p>Crates.io는 Rust의 공식 패키지 저장소로, Rust 라이브러리와 애플리케이션을 공유하고 검색할 수 있는 중앙 집중식 저장소입니다.</p> +<p><code>Cargo.toml</code> 파일의 <code>[dependencies]</code> 섹션에 패키지 이름과 원하는 버전을 추가함으로써 저장소에서 패키지를 가져올 수 있습니다.</p> +<h2 id="-2">자신의 라이브러리 공개 및 배포 방법</h2> +<p>자신의 라이브러리를 Crates.io에 공개하고 배포하려면 다음 단계를 수행하세요.</p> +<ol> +<li>먼저, <code>Cargo.toml</code> 파일에 라이브러리에 대한 메타데이터를 작성하세요. 예를 들면:</li> +</ol> +<pre><code class="toml">[package] +name = "your_library_name" +version = "0.1.0" +authors = ["Your Name <your.email@example.com>"] +edition = "2021" +description = "My app!!!!"</code></pre> +<ol start="2"> +<li>라이브러리를 Crates.io에 업로드하려면 먼저 <a href="https://crates.io/" target="_blank" rel="noopener">Crates.io</a>에서 계정을 생성하고,</li> +</ol> +<p>Cargo CLI 도구를 사용하여 로그인하세요.</p> +<pre><code class="sh">cargo login your-api-token</code></pre> +<p><em>API 토큰은 Crates.io 계정 설정 페이지에서 발급받을 수 있습니다.</em></p> +<ol start="3"> +<li>라이브러리를 Crates.io에 게시하세요.</li> +</ol> +<pre><code class="sh">cargo publish</code></pre> +<p>이제 라이브러리가 Crates.io에 등록되었으며, 다른 사용자들이 이를 의존성으로 사용할 수 있습니다.</p> +<h1 id="-3">정보</h1> +<p>라이브러리를 배포하고 IDE에서 함수 주석 같은 것을 만들 때는</p> +<p><code>///</code> 나 <code>//!</code>로 마크다운 형식으로 만들면 됩니다.</p> +<pre><code class="rust">/// # Hello +fn hello() {}</code></pre> + <div class="bottomnav"> + <span class="back"><a href="44_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="46_ko.html" rel="next">다음 ❯</a></span> + </div> + </div> + <div class="code"><center><img src="/ferris_lofi.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> + </div> + <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><a target="_blank" rel="noopener" href="https://www.youtube.com/c/SoftwareToolTime">아주대학교 Software Tool Time</a> - Rust 튜토리얼 (Basic)</p> + </footer> + </body> +</html> \ No newline at end of file diff --git a/docs/46_ko.html b/docs/46_ko.html index 63ba0a75fcf6938fcb0d7db524f3a034c386e7bf..a12b614f289013535a51129b39f7504c9074b014 100644 --- a/docs/46_ko.html +++ b/docs/46_ko.html @@ -35,14 +35,16 @@ <span class="toc"><a href="TOC_ko.html">목차</a></span> </div> <div class="page"> - <h1>Hey</h1> - <p>CSW</p> + <h1>Chapter 5 - Conclusion</h1> + <p>자신만의 라이브러리를 만들고 퍼블릭에 업로드 해보았습니다.</p> +<p>여러분들의 독창적인 아이디어로 프로젝트를 만들어 Rust 커뮤니티에 기여하는</p> +<p>진정한 <strong>Rustacean</strong>이 되보세요!</p> <div class="bottomnav"> - <span class="back"><a href="chapter_6_ko.html" rel="prev">❮ 이전</a></span> - + <span class="back"><a href="45_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 class="code"><center><img src="/ferris_lofi.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> </div> <script> var pres = document.querySelectorAll("pre>code"); diff --git a/docs/48_ko.html b/docs/48_ko.html new file mode 100644 index 0000000000000000000000000000000000000000..63ba0a75fcf6938fcb0d7db524f3a034c386e7bf --- /dev/null +++ b/docs/48_ko.html @@ -0,0 +1,65 @@ +<!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 by 최석원"> + <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> + 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><a target="_blank" rel="noopener" href="https://www.youtube.com/c/SoftwareToolTime">아주대학교 Software Tool Time</a> - 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 bb945aeb7e2b89eac9354309e3f99f5e2caaf9d0..8517b73148fc1e6d4f968a7c75f2c0ef6199ddb0 100644 --- a/docs/TOC_ko.html +++ b/docs/TOC_ko.html @@ -81,9 +81,11 @@ <li><a href="41_ko.html">unsafe 코드</a></li> <li><a href="42_ko.html">Chapter 4 - Conclusion</a></li> </ul><h3><a href="chapter_5_ko.html">Chapter 5 - Cargo</a></h3><ul> -<li><a href="44_ko.html">Hey</a></li> +<li><a href="44_ko.html">cargo command</a></li> +<li><a href="45_ko.html">cargo command</a></li> +<li><a href="46_ko.html">Chapter 5 - Conclusion</a></li> </ul><h3><a href="chapter_6_ko.html">Chapter 6 - 웹 서버</a></h3><ul> -<li><a href="46_ko.html">Hey</a></li> +<li><a href="48_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_5_ko.html b/docs/chapter_5_ko.html index 66bfafaed42b89d44bc721f6a66cb67d62e40d73..1fe2e451399c9ea4dd652cc068538897a2782f1d 100644 --- a/docs/chapter_5_ko.html +++ b/docs/chapter_5_ko.html @@ -36,14 +36,33 @@ </div> <div class="page"> <h1>Chapter 5 - Cargo</h1> - <p>모듈 사용</p> -<p>간단한 모듈 제작 및 업로드</p> + <h2 id="cargo">Cargo 소개</h2> +<p>Cargo는 Rust의 패키지 관리자 및 빌드 도구입니다.</p> +<p>Cargo를 사용하면 프로젝트 생성, 의존성 관리, 빌드, 테스트 등의 작업을 쉽게 처리할 수 있습니다.</p> +<h2 id="">프로젝트 생성 및 구조</h2> +<h3 id="-1">프로젝트 생성</h3> +<p><code>cargo new</code> 명령어를 사용하여 새로운 Rust 프로젝트를 생성할 수 있습니다.</p> +<p>예를 들어, "my_project"라는 이름의 프로젝트를 만들고자 한다면 다음과 같이 입력하세요.</p> +<p><code>cargo new my_project</code></p> +<p>이렇게 하면 <code>my_project</code>라는 이름의 폴더가 생성되고, 그 안에 기본적인 Rust 프로젝트 구조가 자동으로 구성됩니다.</p> +<p>(기본적으론 --bin 이 같이 넘어가서 바이너리 프로젝트 입니다. 라이브러리는 --lib)</p> +<h3 id="-2">프로젝트 구조</h3> +<p>생성된 프로젝트의 주요 폴더 및 파일은 다음과 같습니다.</p> +<ul> +<li><code>Cargo.toml</code>: 프로젝트의 메타데이터 및 의존성을 관리하는 파일입니다. 이 파일에는 프로젝트의 이름, 버전, 저자 정보와 외부 패키지 의존성 등이 포함됩니다.</li> +<li><code>src</code>: 소스 코드가 위치하는 폴더입니다. 이 폴더 안에는 기본적으로 <code>main.rs</code> 또는 <code>lib.rs</code> 파일이 생성됩니다. 프로젝트의 메인 소스 코드를 작성하는 곳입니다.</li> +<li><code>src/main.rs</code>: 바이너리 프로젝트의 메인 함수를 포함하는 소스 파일입니다. 프로젝트가 실행될 때 이 파일의 코드가 호출됩니다.</li> +<li><code>src/lib.rs</code>: 라이브러리 프로젝트의 루트 모듈을 포함하는 소스 파일입니다. 여기에 라이브러리의 공개 API를 정의하고 구현할 수 있습니다.</li> +<li><code>target</code>: 빌드 결과물이 저장되는 폴더입니다. Cargo는 이 폴더에 컴파일된 바이너리, 라이브러리, 테스트 결과 등을 저장합니다. (매우 큼)</li> +</ul> +<p>이 외에도 <code>.gitignore</code> 파일이 생성되어 Git을 사용할 때 무시해야 하는 파일 및 폴더를 정의합니다.</p> +<p>이렇게 생성된 프로젝트는 바로 빌드 및 실행이 가능한 상태입니다.</p> <div class="bottomnav"> <span class="back"><a href="42_ko.html" rel="prev">❮ 이전</a></span> <span class="next"><a href="44_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"><center><img src="/ferris_lofi.webp" alt="Rust Tutorial" width="300" height="100%"></center></div> </div> <script> var pres = document.querySelectorAll("pre>code"); diff --git a/docs/chapter_6_ko.html b/docs/chapter_6_ko.html index ea552e48388d52968cf86a0bd83e8fbb80c7416e..5f9f1190fc27b88b675404280b8fa06de540be3f 100644 --- a/docs/chapter_6_ko.html +++ b/docs/chapter_6_ko.html @@ -39,8 +39,8 @@ <p>웹 프레임워크 actix-rs 소개</p> <p>간단 카카오톡 챗봇 제작</p> <div class="bottomnav"> - <span class="back"><a href="44_ko.html" rel="prev">❮ 이전</a></span> - <span class="next"><a href="46_ko.html" rel="next">다음 ❯</a></span> + <span class="back"><a href="46_ko.html" rel="prev">❮ 이전</a></span> + <span class="next"><a href="48_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/frontend/generate.js b/frontend/generate.js index 882afdf0d6bebb9d1162bed594d20a9265035d02..d7d606040b1d317133babec5a35e068360b7d42f 100644 --- a/frontend/generate.js +++ b/frontend/generate.js @@ -12,6 +12,15 @@ const rustExtension = { `<pre><code class="rust">${match.trim().replace("<", "<")}</code></pre>`, }; +const langExtension = { + type: "lang", + regex: /```(\w+)\s*([^]+?)```/gi, + replace: (s, lang, content) => + `<pre><code class="${lang.trim()}">${content + .trim() + .replace("<", "<")}</code></pre>`, +}; + const centerImageExtension = { type: "lang", regex: /%center\s*-\s*([^\s%]+)(?:\s*,\s*([^%\n]+))?\s*%/gi, @@ -91,7 +100,7 @@ const aBinder = [ ]; const converter = new showdown.Converter({ - extensions: [...aBinder, rustExtension, centerImageExtension], + extensions: [...aBinder, rustExtension, centerImageExtension, langExtension], }); converter.setOption("parseImgDimensions", true); converter.setOption("simpleLineBreaks", true); diff --git a/frontend/lessons/ko/chapter_3.yaml b/frontend/lessons/ko/chapter_3.yaml index 512e8ae3f5edb028d3aa535779ca0efb499b8651..fed70720cc60652ae16158458871a08a712f8d5a 100644 --- a/frontend/lessons/ko/chapter_3.yaml +++ b/frontend/lessons/ko/chapter_3.yaml @@ -96,7 +96,7 @@ 해시맵은 삽입, 검색 및 삭제 작업에 대한 평균 시간 복잡도가 O(1)입니다. - title: 벡터(Vector) code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn+main%28%29+%7B%0A++++%2F%2F+%EB%B9%88+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0A++++let+mut+vec1%3A+Vec%3Ci32%3E+%3D+Vec%3A%3Anew%28%29%3B%0A%0A++++%2F%2F+%EC%B4%88%EA%B8%B0+%EA%B0%92%EC%9D%B4+%EC%9E%88%EB%8A%94+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0A++++let+vec2+%3D+vec%21%5B1%2C+2%2C+3%2C+4%2C+5%5D%3B%0A++++%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%97%90%EC%84%9C+%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%B4+%EC%9A%94%EC%86%8C%EC%97%90+%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0%0A++++let+first_element+%3D+vec2%5B0%5D%3B+%2F%2F+%EC%B2%AB+%EB%B2%88%EC%A7%B8+%EC%9A%94%EC%86%8C%0A%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%97%90%EC%84%9C+%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%A5%BC+%EC%82%AC%EC%9A%A9%ED%95%B4+%EC%9A%94%EC%86%8C%EB%A5%BC+%EC%88%98%EC%A0%95%ED%95%98%EA%B8%B0%0A++++vec1.push%2810%29%3B+%2F%2F+%EB%B2%A1%ED%84%B0+%EB%81%9D%EC%97%90+10+%EC%B6%94%EA%B0%80%0A++++vec1%5B0%5D+%3D+20%3B+%2F%2F+%EC%B2%AB+%EB%B2%88%EC%A7%B8+%EC%9A%94%EC%86%8C%EB%A5%BC+20%EC%9C%BC%EB%A1%9C+%EB%B3%80%EA%B2%BD%0A++++%0A++++for+element+in+vec2.iter%28%29+%7B%0A++++++++println%21%28%22%EC%9A%94%EC%86%8C%3A+%7B%7D%22%2C+element%29%3B%0A++++%7D%0A++++%0A++++let+slice+%3D+%26vec2%5B1..3%5D%3B+%2F%2F+%EC%9D%B8%EB%8D%B1%EC%8A%A4+1%EB%B6%80%ED%84%B0+2%EA%B9%8C%EC%A7%80%EC%9D%98+%EC%8A%AC%EB%9D%BC%EC%9D%B4%EC%8A%A4+%EC%83%9D%EC%84%B1%0A++++println%21%28%22%7Bslice%3A%23%3F%7D%22%29%3B%0A++++%0A++++vec1.reserve%2810%29%3B+%2F%2F+%EC%B5%9C%EC%86%8C%ED%95%9C+10%EA%B0%9C+%EC%9A%94%EC%86%8C%EB%A5%BC+%EC%A0%80%EC%9E%A5%ED%95%A0+%EC%88%98+%EC%9E%88%EB%8A%94+%EA%B3%B5%EA%B0%84%EC%9D%84+%ED%99%95%EB%B3%B4%0A++++println%21%28%22Vector+%EC%88%98%EC%9A%A9%EB%9F%89%3A+%7B%7D%22%2C+vec1.capacity%28%29%29%3B%0A++++vec1.shrink_to_fit%28%29%3B+%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%A9%EB%9F%89%EC%9D%84+%EC%B5%9C%EC%86%8C%ED%95%9C%EC%9C%BC%EB%A1%9C+%EC%A4%84%EC%9D%B4%EA%B8%B0%0A++++println%21%28%22Vector+%EC%88%98%EC%9A%A9%EB%9F%89%3A+%7B%7D%22%2C+vec1.capacity%28%29%29%3B%0A++++vec1.resize%285%2C+0%29%3B+%2F%2F+%EB%B2%A1%ED%84%B0+%ED%81%AC%EA%B8%B0%EB%A5%BC+5%EB%A1%9C+%EC%A1%B0%EC%A0%88%ED%95%98%EA%B3%A0%2C+%EC%83%88%EB%A1%9C%EC%9A%B4+%EC%9A%94%EC%86%8C%EB%A5%BC+0%EC%9C%BC%EB%A1%9C+%EC%B4%88%EA%B8%B0%ED%99%94%0A++++println%21%28%22Vector+%EC%88%98%EC%9A%A9%EB%9F%89%3A+%7B%7D%22%2C+vec1.capacity%28%29%29%3B%0A++++%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%97%90%EC%84%9C+%EC%9D%B8%EB%8D%B1%EC%8A%A4+i%EC%9D%98+%EC%9A%94%EC%86%8C+%EC%A0%9C%EA%B1%B0%0A++++let+i+%3D+2%3B%0A++++vec1.remove%28i%29%3B%0A%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%97%90%EC%84%9C+%EB%A7%88%EC%A7%80%EB%A7%89+%EC%9A%94%EC%86%8C%EB%A5%BC+%EA%BA%BC%EB%82%B4%EA%B8%B0%0A++++if+let+Some%28last_element%29+%3D+vec1.pop%28%29+%7B%0A++++++++println%21%28%22%EB%A7%88%EC%A7%80%EB%A7%89+%EC%9A%94%EC%86%8C%3A+%7B%7D%22%2C+last_element%29%3B%0A++++%7D%0A%7D%0A comment: >- 이 예제 코드는 Vec, String, HashMap을 함께 사용하여 각각의 이름(String)에 대한 나이(u32) 정보를 저장하고 출력합니다. names 벡터에는 문자열로 된 이름이 저장되며, ages 해시맵에는 각 이름에 해당하는 나이가 저장됩니다. 코드는 벡터의 요소를 반복하며, 각 이름에 대한 나이를 해시맵에서 가져와 출력합니다. content_markdown: > @@ -162,7 +162,9 @@ %rust% vec1.reserve(10); // 최소한 10개 요소를 저장할 수 있는 공간을 확보 + vec1.shrink_to_fit(); // 벡터의 용량을 최소한으로 줄이기 + vec1.resize(5, 0); // 벡터 크기를 5로 조절하고, 새로운 요소를 0으로 초기화 %end% @@ -188,7 +190,7 @@ 더 많은 메소드는 [공식 문서](https://doc.rust-lang.org/alloc/vec/struct.Vec.html#)를 참고하세요. - title: 벡터의 반복자(Iterators) code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=fn+main%28%29+%7B%0A++++let+vec+%3D+vec%21%5B1%2C+2%2C+3%2C+4%2C+5%5D%3B%0A++++println%21%28%22%EB%B3%80%EA%B2%BD+%EC%A0%84+%EB%B2%A1%ED%84%B0%3A+%7B%3A%3F%7D%22%2C+vec%29%3B%0A%0A++++for+element+in+vec.iter%28%29+%7B%0A++++++++println%21%28%22%EC%9A%94%EC%86%8C%3A+%7B%7D%22%2C+element%29%3B%0A++++%7D%0A%0A++++let+mut+vec+%3D+vec%21%5B1%2C+2%2C+3%2C+4%2C+5%5D%3B%0A%0A++++for+element+in+vec.iter_mut%28%29+%7B%0A++++++++*element+*%3D+2%3B+%2F%2F+%EA%B0%81+%EC%9A%94%EC%86%8C%EC%97%90+2%EB%A5%BC+%EA%B3%B1%ED%95%A8%0A++++%7D%0A++++%0A++++println%21%28%22%EB%B3%80%EA%B2%BD%EB%90%9C+%EB%B2%A1%ED%84%B0%3A+%7B%3A%3F%7D%22%2C+vec%29%3B%0A%0A++++let+vec+%3D+vec%21%5B%22a%22.to_string%28%29%2C+%22b%22.to_string%28%29%2C+%22c%22.to_string%28%29%5D%3B%0A%0A++++let+mut+uppercased_vec%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0A%0A++++for+element+in+vec.into_iter%28%29+%7B%0A++++++++uppercased_vec.push%28element.to_uppercase%28%29%29%3B%0A++++%7D%0A++++%0A++++%2F%2F+vec%EC%9D%98+%EC%86%8C%EC%9C%A0%EA%B6%8C%EC%9D%B4+%EB%84%98%EC%96%B4%EA%B0%80%EC%84%9C+%EC%82%AC%EC%9A%A9%ED%95%A0+%EC%88%98+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4%0A++++println%21%28%22%EB%8C%80%EB%AC%B8%EC%9E%90%EB%A1%9C+%EB%B3%80%EA%B2%BD%EB%90%9C+%EB%B2%A1%ED%84%B0%3A+%7B%3A%3F%7D%22%2C+uppercased_vec%29%3B%0A%7D%0A comment: >- 이 예제 코드는 Vec, String, HashMap을 함께 사용하여 각각의 이름(String)에 대한 나이(u32) 정보를 저장하고 출력합니다. names 벡터에는 문자열로 된 이름이 저장되며, ages 해시맵에는 각 이름에 해당하는 나이가 저장됩니다. 코드는 벡터의 요소를 반복하며, 각 이름에 대한 나이를 해시맵에서 가져와 출력합니다. content_markdown: > @@ -394,7 +396,7 @@ 더 많은 메소드는 [공식 문서](https://doc.rust-lang.org/std/collections/struct.HashMap.html)를 참고하세요. - title: 이터레이터(Iterators) 소개 code: >- - https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=%2F%2F+%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC+%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%0D%0Ause+std%3A%3Acollections%3A%3AHashMap%3B%0D%0A%0D%0Afn+main%28%29+%7B%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+names%3A+Vec%3CString%3E+%3D+Vec%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84+%EB%B2%A1%ED%84%B0%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++names.push%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%29%3B%0D%0A++++names.push%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%29%3B%0D%0A%0D%0A++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5+%EC%83%9D%EC%84%B1%0D%0A++++let+mut+ages%3A+HashMap%3CString%2C+u32%3E+%3D+HashMap%3A%3Anew%28%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC+%EC%97%B0%EA%B4%80%EB%90%9C+%EA%B0%92%EC%9D%84+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90+%EC%B6%94%EA%B0%80%0D%0A++++ages.insert%28%22%EC%B2%A0%EC%88%98%22.to_string%28%29%2C+25%29%3B%0D%0A++++ages.insert%28%22%EC%98%81%ED%9D%AC%22.to_string%28%29%2C+24%29%3B%0D%0A++++ages.insert%28%22%EB%AF%BC%EC%88%98%22.to_string%28%29%2C+26%29%3B%0D%0A%0D%0A++++%2F%2F+%EB%B2%A1%ED%84%B0%EC%9D%98+%EC%9A%94%EC%86%8C%EB%93%A4%EC%9D%84+%EB%B0%98%EB%B3%B5%ED%95%98%EB%A9%B0%2C+%EA%B0%81+%EC%9D%B4%EB%A6%84%EC%97%90+%EB%8C%80%ED%95%9C+%EB%82%98%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++for+name+in+names.iter%28%29+%7B%0D%0A++++++++%2F%2F+%ED%95%B4%EC%8B%9C%EB%A7%B5%EC%97%90%EC%84%9C+%EC%9D%B4%EB%A6%84%EC%97%90+%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94+%EB%82%98%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A0%B8%EC%98%B4%0D%0A++++++++let+age+%3D+ages.get%28name%29.unwrap%28%29%3B%0D%0A%0D%0A++++++++%2F%2F+%EA%B2%B0%EA%B3%BC+%EC%B6%9C%EB%A0%A5%0D%0A++++++++println%21%28%22%7B%7D%EB%8B%98%EC%9D%98+%EB%82%98%EC%9D%B4%EB%8A%94+%7B%7D%EC%82%B4%EC%9E%85%EB%8B%88%EB%8B%A4.%22%2C+name%2C+age%29%3B%0D%0A++++%7D%0D%0A%7D%0D%0A + https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=struct+MyNumbers+%7B%0A++++numbers%3A+Vec%3Ci32%3E%2C%0A%7D%0A%0A%2F%2F+Iterator+for+%60iter%28%29%60%0Astruct+MyNumbersIter%3C%27a%3E+%7B%0A++++inner%3A+std%3A%3Aslice%3A%3AIter%3C%27a%2C+i32%3E%2C%0A%7D%0A%0Aimpl%3C%27a%3E+Iterator+for+MyNumbersIter%3C%27a%3E+%7B%0A++++type+Item+%3D+%26%27a+i32%3B%0A%0A++++fn+next%28%26mut+self%29+-%3E+Option%3CSelf%3A%3AItem%3E+%7B%0A++++++++self.inner.next%28%29%0A++++%7D%0A%7D%0A%0A%2F%2F+Iterator+for+%60iter_mut%28%29%60%0Astruct+MyNumbersIterMut%3C%27a%3E+%7B%0A++++inner%3A+std%3A%3Aslice%3A%3AIterMut%3C%27a%2C+i32%3E%2C%0A%7D%0A%0Aimpl%3C%27a%3E+Iterator+for+MyNumbersIterMut%3C%27a%3E+%7B%0A++++type+Item+%3D+%26%27a+mut+i32%3B%0A%0A++++fn+next%28%26mut+self%29+-%3E+Option%3CSelf%3A%3AItem%3E+%7B%0A++++++++self.inner.next%28%29%0A++++%7D%0A%7D%0A%0A%2F%2F+Iterator+for+%60into_iter%28%29%60%0Astruct+MyNumbersIntoIter+%7B%0A++++inner%3A+std%3A%3Avec%3A%3AIntoIter%3Ci32%3E%2C%0A%7D%0A%0Aimpl+Iterator+for+MyNumbersIntoIter+%7B%0A++++type+Item+%3D+i32%3B%0A%0A++++fn+next%28%26mut+self%29+-%3E+Option%3CSelf%3A%3AItem%3E+%7B%0A++++++++self.inner.next%28%29%0A++++%7D%0A%7D%0A%0Aimpl+MyNumbers+%7B%0A++++fn+iter%28%26self%29+-%3E+MyNumbersIter+%7B%0A++++++++MyNumbersIter+%7B%0A++++++++++++inner%3A+self.numbers.iter%28%29%2C%0A++++++++%7D%0A++++%7D%0A%0A++++fn+iter_mut%28%26mut+self%29+-%3E+MyNumbersIterMut+%7B%0A++++++++MyNumbersIterMut+%7B%0A++++++++++++inner%3A+self.numbers.iter_mut%28%29%2C%0A++++++++%7D%0A++++%7D%0A%7D%0A%0Aimpl+IntoIterator+for+MyNumbers+%7B%0A++++type+Item+%3D+i32%3B%0A++++type+IntoIter+%3D+MyNumbersIntoIter%3B%0A%0A++++fn+into_iter%28self%29+-%3E+Self%3A%3AIntoIter+%7B%0A++++++++MyNumbersIntoIter+%7B%0A++++++++++++inner%3A+self.numbers.into_iter%28%29%2C%0A++++++++%7D%0A++++%7D%0A%7D%0A%0Aimpl%3C%27a%3E+IntoIterator+for+%26%27a+MyNumbers+%7B%0A++++type+Item+%3D+%26%27a+i32%3B%0A++++type+IntoIter+%3D+MyNumbersIter%3C%27a%3E%3B%0A%0A++++fn+into_iter%28self%29+-%3E+Self%3A%3AIntoIter+%7B%0A++++++++self.iter%28%29%0A++++%7D%0A%7D%0A%0Aimpl%3C%27a%3E+IntoIterator+for+%26%27a+mut+MyNumbers+%7B%0A++++type+Item+%3D+%26%27a+mut+i32%3B%0A++++type+IntoIter+%3D+MyNumbersIterMut%3C%27a%3E%3B%0A%0A++++fn+into_iter%28self%29+-%3E+Self%3A%3AIntoIter+%7B%0A++++++++self.iter_mut%28%29%0A++++%7D%0A%7D%0A%0A%0Afn+main%28%29+%7B%0A++++let+my+%3D+MyNumbers+%7B+numbers%3A+vec%21%5B1%2C2%2C3%2C4%2C5%5D+%7D%3B%0A++++%0A++++%2F%2F+%EB%82%B4%EA%B0%80+%EB%A7%8C%EB%93%A0+Itertaor%0A++++for+a+in+my.iter%28%29+%7B%0A++++++++println%21%28%22a+%7Ba%7D%22%29%3B%0A++++%7D%0A++++%0A++++let+data+%3D+vec%21%5B1%2C+2%2C+3%2C+4%2C+5%2C+6%5D%3B%0A++++let+filtered_data%3A+Vec%3C_%3E+%3D+data.into_iter%28%29.filter%28%7Cx%7C+x+%25+2+%3D%3D+0%29.collect%28%29%3B%0A++++println%21%28%22Filtered%3A+%7B%3A%23%3F%7D%22%2C+filtered_data%29%3B+%2F%2F+Debug+Format+%EC%B6%9C%EB%A0%A5%0A%0A++++%0A++++let+items+%3D+vec%21%5B%22apple%22%2C+%22banana%22%2C+%22orange%22%5D%3B%0A%0A++++%2F%2F+%EB%AC%B4%ED%95%9C+Iterator%0A++++let+cycle_iter+%3D+items.into_iter%28%29.cycle%28%29%3B%0A%0A++++%2F%2F+Create+an+infinite+iterator+of+incrementing+numbers+starting+from+1%0A++++let+count_iter+%3D+1..%3B%0A%0A++++%2F%2F+Zip+the+two+iterators+to+create+pairs%0A++++let+result_iter+%3D+cycle_iter.zip%28count_iter%29%3B%0A%0A++++%2F%2F+Take+the+first+10+pairs+and+print+them%0A++++for+%28item%2C+count%29+in+result_iter.take%2810%29+%7B%0A++++++++println%21%28%22%7B%7D%3A+%7B%7D%22%2C+count%2C+item%29%3B%0A++++%7D%0A%7D%0A comment: >- 이 예제 코드는 Vec, String, HashMap을 함께 사용하여 각각의 이름(String)에 대한 나이(u32) 정보를 저장하고 출력합니다. names 벡터에는 문자열로 된 이름이 저장되며, ages 해시맵에는 각 이름에 해당하는 나이가 저장됩니다. 코드는 벡터의 요소를 반복하며, 각 이름에 대한 나이를 해시맵에서 가져와 출력합니다. content_markdown: > diff --git a/frontend/lessons/ko/chapter_5.yaml b/frontend/lessons/ko/chapter_5.yaml index 3c6b2482bb463e31bbf0be342b0f83fddaa8e002..85ea5445647a884cd2596b2eef9595ef17b0dc56 100644 --- a/frontend/lessons/ko/chapter_5.yaml +++ b/frontend/lessons/ko/chapter_5.yaml @@ -1,13 +1,237 @@ - title: Chapter 5 - Cargo source: >- - /ajou.webp + /ferris_lofi.webp content_markdown: > - 모듈 사용 + ## Cargo 소개 + Cargo는 Rust의 패키지 관리자 및 빌드 도구입니다. - 간단한 모듈 제작 및 업로드 -- title: Hey + + Cargo를 사용하면 프로젝트 생성, 의존성 관리, 빌드, 테스트 등의 작업을 쉽게 처리할 수 있습니다. + + + ## 프로젝트 생성 및 구조 + + ### 프로젝트 생성 + + `cargo new` 명령어를 사용하여 새로운 Rust 프로젝트를 생성할 수 있습니다. + + + 예를 들어, "my_project"라는 이름의 프로젝트를 만들고자 한다면 다음과 같이 입력하세요. + + + ` + cargo new my_project + ` + + + 이렇게 하면 `my_project`라는 이름의 폴더가 생성되고, 그 안에 기본적인 Rust 프로젝트 구조가 자동으로 구성됩니다. + + + (기본적으론 --bin 이 같이 넘어가서 바이너리 프로젝트 입니다. 라이브러리는 --lib) + + + ### 프로젝트 구조 + + 생성된 프로젝트의 주요 폴더 및 파일은 다음과 같습니다. + + - `Cargo.toml`: 프로젝트의 메타데이터 및 의존성을 관리하는 파일입니다. 이 파일에는 프로젝트의 이름, 버전, 저자 정보와 외부 패키지 의존성 등이 포함됩니다. + + - `src`: 소스 코드가 위치하는 폴더입니다. 이 폴더 안에는 기본적으로 `main.rs` 또는 `lib.rs` 파일이 생성됩니다. 프로젝트의 메인 소스 코드를 작성하는 곳입니다. + + - `src/main.rs`: 바이너리 프로젝트의 메인 함수를 포함하는 소스 파일입니다. 프로젝트가 실행될 때 이 파일의 코드가 호출됩니다. + + - `src/lib.rs`: 라이브러리 프로젝트의 루트 모듈을 포함하는 소스 파일입니다. 여기에 라이브러리의 공개 API를 정의하고 구현할 수 있습니다. + + - `target`: 빌드 결과물이 저장되는 폴더입니다. Cargo는 이 폴더에 컴파일된 바이너리, 라이브러리, 테스트 결과 등을 저장합니다. (매우 큼) + + + 이 외에도 `.gitignore` 파일이 생성되어 Git을 사용할 때 무시해야 하는 파일 및 폴더를 정의합니다. + + + 이렇게 생성된 프로젝트는 바로 빌드 및 실행이 가능한 상태입니다. +- title: cargo command source: >- - /ferris_lofi.png + /ferris_lofi.webp content_markdown: > - CSW + # 의존성 관리 + + ### Cargo.toml 파일을 사용한 외부 패키지 의존성 추가 + + `Cargo.toml` 파일을 사용하여 프로젝트에 외부 패키지 의존성을 추가할 수 있습니다. + + + `[dependencies]` 섹션에 패키지 이름과 원하는 버전을 기록하면 됩니다. + + + 예를 들어, `serde` 패키지를 추가하려면 다음과 같이 `Cargo.toml` 파일에 기록합니다. (cargo add serde) + + <pre><code class="toml">[dependencies] + + serde = "1.0" + </code></pre> + + 이렇게 하면 Cargo는 프로젝트를 빌드할 때 자동으로 `serde` 패키지를 다운로드하고 컴파일하여 프로젝트와 함께 사용할 수 있게 합니다. + + + [@아주대학교 챗봇의 Cargo.tmol](https://github.com/Alfex4936/Rust-Server/blob/main/chatbot/Cargo.toml) + + + ### 의존성 업데이트와 관리 방법 + + `cargo update` 명령어를 사용하면 프로젝트의 의존성을 최신 상태로 업데이트할 수 있습니다. + + + 이 명령어는 `Cargo.lock` 파일에 기록된 의존성 버전을 업데이트하며, 프로젝트 빌드 시 새로운 의존성 버전이 사용됩니다. + + <pre><code class="bash">cargo update</code></pre> + + + # 빌드 및 실행 + + ### cargo 명령어를 사용한 프로젝트 빌드와 실행 방법 + + + `cargo build` 명령어를 사용하여 프로젝트를 빌드할 수 있습니다. + + + 이 명령어는 프로젝트와 그 의존성을 컴파일하고 빌드 결과물을 `target` 폴더에 저장합니다. (target/debug 폴더에 바이너리) + + + <pre><code class="bash">cargo build</code></pre> + + + `cargo run` 명령어를 사용하면 프로젝트를 빌드한 후 바로 실행할 수 있습니다. (단축은 r) + + + 이 명령어는 `cargo build`와 동일한 빌드 과정을 거친 후 생성된 실행 파일을 호출합니다. + + + <pre><code class="bash">cargo r</code></pre> + + + ### 릴리즈 빌드와 디버그 빌드의 차이 + + Cargo는 기본적으로 디버그 빌드를 수행합니다. + + + 디버그 빌드는 최적화되지 않은 상태로 컴파일되며, 디버깅 정보가 포함됩니다. + + + 따라서 실행 속도는 느리지만 디버깅을 용이하게 합니다. + + + 릴리즈 빌드는 최적화를 적용하여 더 빠른 실행 속도를 가지지만, 디버깅 정보가 포함되지 않습니다. + + + 프로덕션 환경에 배포하기 전에 릴리즈 빌드를 사용하는 것이 좋습니다. + + + 릴리즈 빌드를 수행하려면 `--release` 플래그를 사용하세요. (target/release 폴더에 바이너리) + + + <pre><code class="bash">cargo build -r</code></pre> + + + # 정보 + + + cargo korea 처럼 원하는 cargo subcommand를 만들기 위해서는 + + + cargo-korea 프로젝트로 이름을 만들어서 배포하면 됩니다. [@만드는 법 참고](https://choiseokwon.tistory.com/376) +- title: cargo command + source: >- + /ferris_lofi.webp + content_markdown: | + # 테스트 작성 및 실행 + + ## cargo test 명령어를 사용한 테스트 코드 실행 방법 + + `cargo test` 명령어를 사용하여 프로젝트의 테스트 코드를 실행할 수 있습니다. + + 이 명령어는 프로젝트와 그 의존성을 컴파일한 후, 프로젝트 내의 모든 테스트 함수를 실행합니다. + + ```sh + cargo test + ``` + + ## 테스트 코드 작성 가이드 + + 테스트 코드는 `#[test]` 속성을 사용하여 작성할 수 있습니다. + + 일반적으로 테스트 함수는 프로젝트의 `src` 폴더와 같은 경로에 위치한 `tests` 폴더 내에 작성됩니다. + + 다음은 간단한 테스트 함수 예제입니다. + + ```rust + #[cfg(test)] + mod tests { + #[test] + fn it_works() { + assert_eq!(2 + 2, 4); + } + } + ``` + + # Crates.io 소개 + + ## Rust의 패키지 저장소 및 사용 방법 + + Crates.io는 Rust의 공식 패키지 저장소로, Rust 라이브러리와 애플리케이션을 공유하고 검색할 수 있는 중앙 집중식 저장소입니다. + + `Cargo.toml` 파일의 `[dependencies]` 섹션에 패키지 이름과 원하는 버전을 추가함으로써 저장소에서 패키지를 가져올 수 있습니다. + + + ## 자신의 라이브러리 공개 및 배포 방법 + + 자신의 라이브러리를 Crates.io에 공개하고 배포하려면 다음 단계를 수행하세요. + + 1. 먼저, `Cargo.toml` 파일에 라이브러리에 대한 메타데이터를 작성하세요. 예를 들면: + + ```toml + [package] + name = "your_library_name" + version = "0.1.0" + authors = ["Your Name <your.email@example.com>"] + edition = "2021" + description = "My app!!!!" + ``` + + 2. 라이브러리를 Crates.io에 업로드하려면 먼저 [Crates.io](https://crates.io/)에서 계정을 생성하고, + + Cargo CLI 도구를 사용하여 로그인하세요. + + ```sh + cargo login your-api-token + ``` + + _API 토큰은 Crates.io 계정 설정 페이지에서 발급받을 수 있습니다._ + + 3. 라이브러리를 Crates.io에 게시하세요. + + ```sh + cargo publish + ``` + + 이제 라이브러리가 Crates.io에 등록되었으며, 다른 사용자들이 이를 의존성으로 사용할 수 있습니다. + + # 정보 + + 라이브러리를 배포하고 IDE에서 함수 주석 같은 것을 만들 때는 + + `///` 나 `//!`로 마크다운 형식으로 만들면 됩니다. + + ```rust + /// # Hello + fn hello() {} + ``` +- title: Chapter 5 - Conclusion + source: >- + /ferris_lofi.webp + content_markdown: | + 자신만의 라이브러리를 만들고 퍼블릭에 업로드 해보았습니다. + + 여러분들의 독창적인 아이디어로 프로젝트를 만들어 Rust 커뮤니티에 기여하는 + + 진정한 **Rustacean**이 되보세요!