Skip to content
Snippets Groups Projects
Commit 3935865c authored by Alfex4936's avatar Alfex4936
Browse files

Update chapter 6

parent 26524960
No related branches found
No related tags found
No related merge requests found
...@@ -37,14 +37,47 @@ ...@@ -37,14 +37,47 @@
<div class="page"> <div class="page">
<h1>변수</h1> <h1>변수</h1>
<p>Rust에서는 <code>let</code> 키워드를 사용하여 변수를 선언합니다.</p> <p>Rust에서는 <code>let</code> 키워드를 사용하여 변수를 선언합니다.</p>
<div align="center"> <p> <div align="center">
<p>
<img src="https://user-images.githubusercontent.com/2356749/223641752-4b38e61f-82f4-450d-b778-526cb7ad618c.png"> <img src="https://user-images.githubusercontent.com/2356749/223641752-4b38e61f-82f4-450d-b778-526cb7ad618c.png">
</p> </div> </p>
</div>
<p>값을 할당할 때, Rust는 거의 대부분 변수의 타입을 추론할 수 있습니다.</p> <p>값을 할당할 때, Rust는 거의 대부분 변수의 타입을 추론할 수 있습니다.</p>
<p>만약 Rust가 추론하지 못하면 변수의 선언 시 타입을 추가할 수 있습니다.</p> <p>만약 Rust가 추론하지 못하면 변수의 선언 시 타입을 추가할 수 있습니다.</p>
<p>변수의 이름을 여러 번 사용하여 값을 할당할 수 있습니다.</p> <p>변수의 이름을 여러 번 사용하여 값을 할당할 수 있습니다.</p>
<p>이를 "shadowing"이라고 하며, 변수의 타입은 재할당될 때마다 변경됩니다.</p> <p>이를 "shadowing"이라고 하며, 변수의 타입은 재할당될 때마다 변경됩니다.</p>
<p>변수의 이름은 항상 <code>snake_case</code>로 작성합니다.</p> <p>변수의 이름은 항상 <code>snake_case</code>로 작성합니다.</p>
<h1 id=""></h1>
<p>Rust에서는 <code>let</code> 키워드를 사용하여 변수를 만들 때, 표현식을 사용할 수 있습니다.</p>
<p>표현식(expression)은 어떤 값을 반환하는 코드 조각을 의미합니다.</p>
<p>Rust의 <code>match</code><code>if</code>문은 표현식입니다. 이런 표현식을 사용하여 변수의 값을 초기화할 수 있습니다.</p>
<h2 id="match">match 표현식 사용하기</h2>
<p><code>match</code> 표현식은 여러 가지 패턴을 확인하고, 매치되는 패턴에 대한 값을 반환합니다. 예를 들면:</p>
<pre><code class="rust">let x = 3;
let a = match x {
1 => "one",
2 => "two",
3 => "three",
_ => "other",
};
println!("The value of a is: {}", a);</code></pre>
<p>위의 코드에서, <code>x</code> 값이 3이기 때문에 <code>a</code>의 값은 "three"가 됩니다.</p>
<h3 id="if">if 표현식 사용하기</h3>
<p><code>if</code> 표현식을 사용하여 조건에 따라 다른 값을 반환할 수도 있습니다. 예를 들면:</p>
<pre><code class="rust">let condition = true;
let a = if condition {
"The condition is true"
} else {
"The condition is false"
};
println!("The value of a is: {}", a);</code></pre>
<p>위의 코드에서, <code>condition</code> 값이 <code>true</code>이므로 <code>a</code>의 값은 "The condition is true"가 됩니다.</p>
<p>이렇게 표현식을 사용하여 변수를 초기화하는 방식은 Rust에서 흔히 사용되는 문법입니다.</p>
<p>이를 통해 코드를 간결하게 작성할 수 있고, 변수의 값이 초기화되는 과정을 명확하게 이해할 수 있습니다.</p>
<div class="bottomnav"> <div class="bottomnav">
<span class="back"><a href="07_ko.html" rel="prev">❮ 이전</a></span> <span class="back"><a href="07_ko.html" rel="prev">❮ 이전</a></span>
<span class="next"><a href="09_ko.html" rel="next">다음 ❯</a></span> <span class="next"><a href="09_ko.html" rel="next">다음 ❯</a></span>
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
<span class="toc"><a href="TOC_ko.html">목차</a></span> <span class="toc"><a href="TOC_ko.html">목차</a></span>
</div> </div>
<div class="page"> <div class="page">
<h1>cargo command</h1> <h1>cargo build</h1>
<h1 id="">의존성 관리</h1> <h1 id="">의존성 관리</h1>
<h3 id="cargotoml">Cargo.toml 파일을 사용한 외부 패키지 의존성 추가</h3> <h3 id="cargotoml">Cargo.toml 파일을 사용한 외부 패키지 의존성 추가</h3>
<p><code>Cargo.toml</code> 파일을 사용하여 프로젝트에 외부 패키지 의존성을 추가할 수 있습니다.</p> <p><code>Cargo.toml</code> 파일을 사용하여 프로젝트에 외부 패키지 의존성을 추가할 수 있습니다.</p>
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
<span class="toc"><a href="TOC_ko.html">목차</a></span> <span class="toc"><a href="TOC_ko.html">목차</a></span>
</div> </div>
<div class="page"> <div class="page">
<h1>cargo command</h1> <h1>cargo publish</h1>
<h1 id="">테스트 작성 및 실행</h1> <h1 id="">테스트 작성 및 실행</h1>
<h2 id="cargotest">cargo test 명령어를 사용한 테스트 코드 실행 방법</h2> <h2 id="cargotest">cargo test 명령어를 사용한 테스트 코드 실행 방법</h2>
<p><code>cargo test</code> 명령어를 사용하여 프로젝트의 테스트 코드를 실행할 수 있습니다.</p> <p><code>cargo test</code> 명령어를 사용하여 프로젝트의 테스트 코드를 실행할 수 있습니다.</p>
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
<p>CSW</p> <p>CSW</p>
<div class="bottomnav"> <div class="bottomnav">
<span class="back"><a href="chapter_6_ko.html" rel="prev">❮ 이전</a></span> <span class="back"><a href="chapter_6_ko.html" rel="prev">❮ 이전</a></span>
<span class="next"><a href="49_ko.html" rel="next">다음 ❯</a></span>
</div> </div>
</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.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
......
<!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>Chapter 6 - Conclusion</h1>
<p>CSW</p>
<div class="bottomnav">
<span class="back"><a href="48_ko.html" rel="prev">❮ 이전</a></span>
<span class="next"><a href="chapter_7_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>
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
...@@ -81,11 +81,13 @@ ...@@ -81,11 +81,13 @@
<li><a href="41_ko.html">unsafe 코드</a></li> <li><a href="41_ko.html">unsafe 코드</a></li>
<li><a href="42_ko.html">Chapter 4 - Conclusion</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> </ul><h3><a href="chapter_5_ko.html">Chapter 5 - Cargo</a></h3><ul>
<li><a href="44_ko.html">cargo command</a></li> <li><a href="44_ko.html">cargo build</a></li>
<li><a href="45_ko.html">cargo command</a></li> <li><a href="45_ko.html">cargo publish</a></li>
<li><a href="46_ko.html">Chapter 5 - Conclusion</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> </ul><h3><a href="chapter_6_ko.html">Chapter 6 - 웹 서버</a></h3><ul>
<li><a href="48_ko.html">Hey</a></li> <li><a href="48_ko.html">Hey</a></li>
<li><a href="49_ko.html">Chapter 6 - Conclusion</a></li>
</ul><h3><a href="chapter_7_ko.html">마치며</a></h3><ul>
</ul> </ul>
</div> </div>
<div style="display: flex;flex-direction: column;justify-content: center;align-items: center;"> <div style="display: flex;flex-direction: column;justify-content: center;align-items: center;">
......
...@@ -36,14 +36,26 @@ ...@@ -36,14 +36,26 @@
</div> </div>
<div class="page"> <div class="page">
<h1>Chapter 6 - 웹 서버</h1> <h1>Chapter 6 - 웹 서버</h1>
<p>웹 프레임워크 actix-rs 소개</p> <p>이번 챕터에서는 실제로 Rust로 무엇을 만들면서 배워보려고</p>
<p>간단 카카오톡 챗봇 제작</p> <p>Rust의 웹 프레임워크 중 하나인 <a href="https://actix.rs/" target="_blank" rel="noopener">actix-rs</a>에 대해 소개하고자 합니다.</p>
<p>actix-rs는 Rust의 강력한 타입 시스템과 속도를 활용하여 높은 성능과 안전성을 제공하는 웹 프레임워크입니다.</p>
<p>actix-rs는 다음과 같은 특징을 가지고 있습니다.</p>
<ul>
<li>비동기적이고 멀티스레드인 웹 서버를 쉽게 구축할 수 있습니다.</li>
<li>HTTP/1.x와 HTTP/2를 모두 지원합니다.</li>
<li>웹소켓, 스트리밍, 파일 업로드 등 다양한 기능을 제공합니다.</li>
<li>미들웨어, 플러그인, 데이터 추출기 등을 통해 확장성이 뛰어납니다.</li>
<li>템플릿 엔진, 데이터베이스, 인증 등과 같은 다른 라이브러리와 쉽게 통합할 수 있습니다.</li>
</ul>
<p>실제 어떻게 만들 수 있는지 바로 보고 싶으시면 <a href="https://github.com/Alfex4936/Rust-Server/tree/main/chatbot" target="_blank" rel="noopener">아주대 카카오톡 챗봇을 actix-rs</a>로 만든 버전을 참고하세요.</p>
<div class="bottomnav"> <div class="bottomnav">
<span class="back"><a href="46_ko.html" rel="prev">❮ 이전</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> <span class="next"><a href="48_ko.html" rel="next">다음 ❯</a></span>
</div> </div>
</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=use+actix_web%3A%3A%7Bget%2C+post%2C+web%2C+App%2C+HttpResponse%2C+HttpServer%2C+Responder%7D%3B%0A%0A%23%5Bget%28%22%2F%22%29%5D%0Aasync+fn+hello%28%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28%22Hello+world%21%22%29%0A%7D%0A%0A%23%5Bpost%28%22%2Fecho%22%29%5D%0Aasync+fn+echo%28req_body%3A+String%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28req_body%29%0A%7D%0A%0Aasync+fn+manual_hello%28%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28%22Hey+there%21%22%29%0A%7D%0A%0A%23%5Bactix_web%3A%3Amain%5D%0Aasync+fn+main%28%29+-%3E+std%3A%3Aio%3A%3AResult%3C%28%29%3E+%7B%0A++++HttpServer%3A%3Anew%28%7C%7C+%7B%0A++++++++App%3A%3Anew%28%29%0A++++++++++++.service%28hello%29%0A++++++++++++.service%28echo%29%0A++++++++++++.route%28%22%2Fhey%22%2C+web%3A%3Aget%28%29.to%28manual_hello%29%29%0A++++%7D%29%0A++++.bind%28%28%220.0.0.0%22%2C+8080%29%29%3F+%2F%2F+0.0.0.0%EC%9D%80+%EB%AA%A8%EB%93%A0+IP%2C+%EC%A3%BC%EB%A1%9C+public%ED%95%98%EA%B2%8C+%EC%97%B4+%EB%95%8C+%EC%94%80%0A++++.run%28%29%0A++++.await%0A%7D%0A" scrolling="no" frameborder="no" allowtransparency="true" allowfullscreen="true" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" title="Rust Playground" loading="lazy"></iframe>
</div>
</div> </div>
<script> <script>
var pres = document.querySelectorAll("pre>code"); var pres = document.querySelectorAll("pre>code");
......
...@@ -35,16 +35,14 @@ ...@@ -35,16 +35,14 @@
<span class="toc"><a href="TOC_ko.html">목차</a></span> <span class="toc"><a href="TOC_ko.html">목차</a></span>
</div> </div>
<div class="page"> <div class="page">
<h1>부록 - 코드 답안</h1> <h1>마치며</h1>
<p>챕터 1 답안</p> <p>CSW</p>
<div class="bottomnav"> <div class="bottomnav">
<span class="back"><a href="39_ko.html" rel="prev">❮ 이전</a></span> <span class="back"><a href="49_ko.html" rel="prev">❮ 이전</a></span>
<span class="next"><a href="41_ko.html" rel="next">다음 ❯</a></span>
</div>
</div> </div>
<div class="code">
<iframe id="rust-playground" width="100%" src="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=enum+Shape+%7B%0A++++Circle%28f64%29%2C+++++++++++++%2F%2F+%EB%B0%98%EC%A7%80%EB%A6%84%0A++++Rectangle%28f64%2C+f64%29%2C+++++%2F%2F+%EA%B0%80%EB%A1%9C%2C+%EC%84%B8%EB%A1%9C%0A++++Triangle%28f64%2C+f64%2C+f64%29%2C+%2F%2F+%EC%84%B8+%EB%B3%80%EC%9D%98+%EA%B8%B8%EC%9D%B4%0A%7D%0A%0A%2F%2F+%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+area%28shape%3A+%26Shape%29+-%3E+f64+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28r%29+%3D%3E+3.14+*+r+*+r%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+w+*+h%2C%0A++++++++Shape%3A%3ATriangle%28a%2C+b%2C+c%29+%3D%3E+%7B%0A++++++++++++%2F%2F+%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%B5%EC%8B%9D%0A++++++++++++let+s+%3D+%28a+%2B+b+%2B+c%29+%2F+2.0%3B%0A++++++++++++let+area+%3D+s+*+%28s+-+a%29+*+%28s+-+b%29+*+%28s+-+c%29%3B%0A++++++++++++%2F%2F+%EB%84%93%EC%9D%B4%EA%B0%80+%EC%9D%8C%EC%88%98%EB%A9%B4+%EC%97%90%EB%9F%AC+%EB%B0%9C%EC%83%9D%0A++++++++++++if+area+%3C+0.0+%7B%0A++++++++++++++++panic%21%28%22Invalid+triangle%22%29%3B%0A++++++++++++%7D+else+%7B%0A++++++++++++++++area.sqrt%28%29%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A%7D%0A%0A%2F%2F+%EB%91%98%EB%A0%88%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+perimeter%28shape%3A+%26Shape%29+-%3E+f64+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28r%29+%3D%3E+2.0+*+3.14+*+r%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+2.0+*+%28w+%2B+h%29%2C%0A++++++++Shape%3A%3ATriangle%28a%2C+b%2C+c%29+%3D%3E+%7B%0A++++++++++++%2F%2F+%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%98+%EB%91%98%EB%A0%88+%EA%B3%B5%EC%8B%9D%0A++++++++++++let+p+%3D+a+%2B+b+%2B+c%3B%0A++++++++++++%2F%2F+%EB%91%98%EB%A0%88%EA%B0%80+%EC%9D%8C%EC%88%98%EB%A9%B4+%EC%97%90%EB%9F%AC+%EB%B0%9C%EC%83%9D%0A++++++++++++if+p+%3C+0.0+%7B%0A++++++++++++++++panic%21%28%22Invalid+triangle%22%29%3B%0A++++++++++++%7D+else+%7B%0A++++++++++++++++p%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A%7D%0A%0A%2F%2F+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EC%A7%80+%ED%8C%90%EB%B3%84%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+is_square%28shape%3A+%26Shape%29+-%3E+bool+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28_%29+%3D%3E+false%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+w+%3D%3D+h%2C%0A++++++++Shape%3A%3ATriangle%28_%2C+_%2C+_%29+%3D%3E+false%2C%0A++++%7D%0A%7D%0A%0A%2F%2F+%EA%B2%B0%EA%B3%BC%0A%2F*%0A%EC%9B%90+%EB%84%93%EC%9D%B4%3A+12.56%0A%EC%82%AC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+12%0A%EC%82%BC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+6%0A%EC%9B%90+%EB%91%98%EB%A0%88%3A+12.56%0A%EC%82%AC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+14%0A%EC%82%BC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+12%0A%EC%9B%90%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A*%2F%0Afn+main%28%29+%7B%0A++++%2F%2F+Shape+%ED%83%80%EC%9E%85%EC%9D%98+%EA%B0%92%EB%93%A4%EC%9D%84+%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++let+circle+%3D+Shape%3A%3ACircle%282.0%29%3B%0A++++let+rectangle+%3D+Shape%3A%3ARectangle%283.0%2C+4.0%29%3B%0A++++let+triangle+%3D+Shape%3A%3ATriangle%283.0%2C+4.0%2C+5.0%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26triangle%29%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%91%98%EB%A0%88%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26triangle%29%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EC%A7%80+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26triangle%29%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>
<div class="code"><center><img src="/ferris_lofi.png" alt="Rust Tutorial" width="300" height="100%"></center></div>
</div> </div>
<script> <script>
var pres = document.querySelectorAll("pre>code"); var pres = document.querySelectorAll("pre>code");
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
- title: 변수 - title: 변수
code: >- code: >-
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 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
content_markdown: > content_markdown: |
Rust에서는 `let` 키워드를 사용하여 변수를 선언합니다. Rust에서는 `let` 키워드를 사용하여 변수를 선언합니다.
<div align="center"> <div align="center">
...@@ -71,18 +71,64 @@ ...@@ -71,18 +71,64 @@
값을 할당할 때, Rust는 거의 대부분 변수의 타입을 추론할 수 있습니다. 값을 할당할 때, Rust는 거의 대부분 변수의 타입을 추론할 수 있습니다.
만약 Rust가 추론하지 못하면 변수의 선언 시 타입을 추가할 수 있습니다. 만약 Rust가 추론하지 못하면 변수의 선언 시 타입을 추가할 수 있습니다.
변수의 이름을 여러 번 사용하여 값을 할당할 수 있습니다. 변수의 이름을 여러 번 사용하여 값을 할당할 수 있습니다.
이를 "shadowing"이라고 하며, 변수의 타입은 재할당될 때마다 변경됩니다. 이를 "shadowing"이라고 하며, 변수의 타입은 재할당될 때마다 변경됩니다.
변수의 이름은 항상 `snake_case`로 작성합니다. 변수의 이름은 항상 `snake_case`로 작성합니다.
# 팁
Rust에서는 `let` 키워드를 사용하여 변수를 만들 때, 표현식을 사용할 수 있습니다.
표현식(expression)은 어떤 값을 반환하는 코드 조각을 의미합니다.
Rust의 `match`와 `if`문은 표현식입니다. 이런 표현식을 사용하여 변수의 값을 초기화할 수 있습니다.
## match 표현식 사용하기
`match` 표현식은 여러 가지 패턴을 확인하고, 매치되는 패턴에 대한 값을 반환합니다. 예를 들면:
```rust
let x = 3;
let a = match x {
1 => "one",
2 => "two",
3 => "three",
_ => "other",
};
println!("The value of a is: {}", a);
```
위의 코드에서, `x` 값이 3이기 때문에 `a`의 값은 "three"가 됩니다.
### if 표현식 사용하기
`if` 표현식을 사용하여 조건에 따라 다른 값을 반환할 수도 있습니다. 예를 들면:
```rust
let condition = true;
let a = if condition {
"The condition is true"
} else {
"The condition is false"
};
println!("The value of a is: {}", a);
```
위의 코드에서, `condition` 값이 `true`이므로 `a`의 값은 "The condition is true"가 됩니다.
이렇게 표현식을 사용하여 변수를 초기화하는 방식은 Rust에서 흔히 사용되는 문법입니다.
이를 통해 코드를 간결하게 작성할 수 있고, 변수의 값이 초기화되는 과정을 명확하게 이해할 수 있습니다.
- title: 변수 업데이트 - title: 변수 업데이트
code: >- code: >-
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 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
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
이렇게 생성된 프로젝트는 바로 빌드 및 실행이 가능한 상태입니다. 이렇게 생성된 프로젝트는 바로 빌드 및 실행이 가능한 상태입니다.
- title: cargo command - title: cargo build
source: >- source: >-
/ferris_lofi.webp /ferris_lofi.webp
content_markdown: > content_markdown: >
...@@ -140,7 +140,7 @@ ...@@ -140,7 +140,7 @@
cargo-korea 프로젝트로 이름을 만들어서 배포하면 됩니다. [@만드는 법 참고](https://choiseokwon.tistory.com/376) cargo-korea 프로젝트로 이름을 만들어서 배포하면 됩니다. [@만드는 법 참고](https://choiseokwon.tistory.com/376)
- title: cargo command - title: cargo publish
source: >- source: >-
/ferris_lofi.webp /ferris_lofi.webp
content_markdown: | content_markdown: |
......
- title: Chapter 6 - 웹 서버 - title: Chapter 6 - 웹 서버
source: >- code: >-
/ajou.webp https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=use+actix_web%3A%3A%7Bget%2C+post%2C+web%2C+App%2C+HttpResponse%2C+HttpServer%2C+Responder%7D%3B%0A%0A%23%5Bget%28%22%2F%22%29%5D%0Aasync+fn+hello%28%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28%22Hello+world%21%22%29%0A%7D%0A%0A%23%5Bpost%28%22%2Fecho%22%29%5D%0Aasync+fn+echo%28req_body%3A+String%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28req_body%29%0A%7D%0A%0Aasync+fn+manual_hello%28%29+-%3E+impl+Responder+%7B%0A++++HttpResponse%3A%3AOk%28%29.body%28%22Hey+there%21%22%29%0A%7D%0A%0A%23%5Bactix_web%3A%3Amain%5D%0Aasync+fn+main%28%29+-%3E+std%3A%3Aio%3A%3AResult%3C%28%29%3E+%7B%0A++++HttpServer%3A%3Anew%28%7C%7C+%7B%0A++++++++App%3A%3Anew%28%29%0A++++++++++++.service%28hello%29%0A++++++++++++.service%28echo%29%0A++++++++++++.route%28%22%2Fhey%22%2C+web%3A%3Aget%28%29.to%28manual_hello%29%29%0A++++%7D%29%0A++++.bind%28%28%220.0.0.0%22%2C+8080%29%29%3F+%2F%2F+0.0.0.0%EC%9D%80+%EB%AA%A8%EB%93%A0+IP%2C+%EC%A3%BC%EB%A1%9C+public%ED%95%98%EA%B2%8C+%EC%97%B4+%EB%95%8C+%EC%94%80%0A++++.run%28%29%0A++++.await%0A%7D%0A
content_markdown: > content_markdown: |
웹 프레임워크 actix-rs 소개 이번 챕터에서는 실제로 Rust로 무엇을 만들면서 배워보려고
Rust의 웹 프레임워크 중 하나인 [actix-rs](https://actix.rs/)에 대해 소개하고자 합니다.
actix-rs는 Rust의 강력한 타입 시스템과 속도를 활용하여 높은 성능과 안전성을 제공하는 웹 프레임워크입니다.
actix-rs는 다음과 같은 특징을 가지고 있습니다.
- 비동기적이고 멀티스레드인 웹 서버를 쉽게 구축할 수 있습니다.
- HTTP/1.x와 HTTP/2를 모두 지원합니다.
- 웹소켓, 스트리밍, 파일 업로드 등 다양한 기능을 제공합니다.
- 미들웨어, 플러그인, 데이터 추출기 등을 통해 확장성이 뛰어납니다.
- 템플릿 엔진, 데이터베이스, 인증 등과 같은 다른 라이브러리와 쉽게 통합할 수 있습니다.
간단 카카오톡 챗봇 제작 실제 어떻게 만들 수 있는지 바로 보고 싶으시면 [아주대 카카오톡 챗봇을 actix-rs](https://github.com/Alfex4936/Rust-Server/tree/main/chatbot)로 만든 버전을 참고하세요.
- title: Hey - title: Hey
source: >- source: >-
/ferris_lofi.png /ferris_lofi.png
content_markdown: > content_markdown: |
CSW
- title: Chapter 6 - Conclusion
source: >-
/ferris_lofi.png
content_markdown: |
CSW CSW
- title: 부록 - 코드 답안 - title: 마치며
code: >-
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&code=enum+Shape+%7B%0A++++Circle%28f64%29%2C+++++++++++++%2F%2F+%EB%B0%98%EC%A7%80%EB%A6%84%0A++++Rectangle%28f64%2C+f64%29%2C+++++%2F%2F+%EA%B0%80%EB%A1%9C%2C+%EC%84%B8%EB%A1%9C%0A++++Triangle%28f64%2C+f64%2C+f64%29%2C+%2F%2F+%EC%84%B8+%EB%B3%80%EC%9D%98+%EA%B8%B8%EC%9D%B4%0A%7D%0A%0A%2F%2F+%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+area%28shape%3A+%26Shape%29+-%3E+f64+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28r%29+%3D%3E+3.14+*+r+*+r%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+w+*+h%2C%0A++++++++Shape%3A%3ATriangle%28a%2C+b%2C+c%29+%3D%3E+%7B%0A++++++++++++%2F%2F+%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4+%EA%B3%B5%EC%8B%9D%0A++++++++++++let+s+%3D+%28a+%2B+b+%2B+c%29+%2F+2.0%3B%0A++++++++++++let+area+%3D+s+*+%28s+-+a%29+*+%28s+-+b%29+*+%28s+-+c%29%3B%0A++++++++++++%2F%2F+%EB%84%93%EC%9D%B4%EA%B0%80+%EC%9D%8C%EC%88%98%EB%A9%B4+%EC%97%90%EB%9F%AC+%EB%B0%9C%EC%83%9D%0A++++++++++++if+area+%3C+0.0+%7B%0A++++++++++++++++panic%21%28%22Invalid+triangle%22%29%3B%0A++++++++++++%7D+else+%7B%0A++++++++++++++++area.sqrt%28%29%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A%7D%0A%0A%2F%2F+%EB%91%98%EB%A0%88%EB%A5%BC+%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+perimeter%28shape%3A+%26Shape%29+-%3E+f64+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28r%29+%3D%3E+2.0+*+3.14+*+r%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+2.0+*+%28w+%2B+h%29%2C%0A++++++++Shape%3A%3ATriangle%28a%2C+b%2C+c%29+%3D%3E+%7B%0A++++++++++++%2F%2F+%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%98+%EB%91%98%EB%A0%88+%EA%B3%B5%EC%8B%9D%0A++++++++++++let+p+%3D+a+%2B+b+%2B+c%3B%0A++++++++++++%2F%2F+%EB%91%98%EB%A0%88%EA%B0%80+%EC%9D%8C%EC%88%98%EB%A9%B4+%EC%97%90%EB%9F%AC+%EB%B0%9C%EC%83%9D%0A++++++++++++if+p+%3C+0.0+%7B%0A++++++++++++++++panic%21%28%22Invalid+triangle%22%29%3B%0A++++++++++++%7D+else+%7B%0A++++++++++++++++p%0A++++++++++++%7D%0A++++++++%7D%0A++++%7D%0A%7D%0A%0A%2F%2F+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EC%A7%80+%ED%8C%90%EB%B3%84%ED%95%98%EB%8A%94+%ED%95%A8%EC%88%98%0Afn+is_square%28shape%3A+%26Shape%29+-%3E+bool+%7B%0A++++match+shape+%7B%0A++++++++Shape%3A%3ACircle%28_%29+%3D%3E+false%2C%0A++++++++Shape%3A%3ARectangle%28w%2C+h%29+%3D%3E+w+%3D%3D+h%2C%0A++++++++Shape%3A%3ATriangle%28_%2C+_%2C+_%29+%3D%3E+false%2C%0A++++%7D%0A%7D%0A%0A%2F%2F+%EA%B2%B0%EA%B3%BC%0A%2F*%0A%EC%9B%90+%EB%84%93%EC%9D%B4%3A+12.56%0A%EC%82%AC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+12%0A%EC%82%BC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+6%0A%EC%9B%90+%EB%91%98%EB%A0%88%3A+12.56%0A%EC%82%AC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+14%0A%EC%82%BC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+12%0A%EC%9B%90%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+false%0A*%2F%0Afn+main%28%29+%7B%0A++++%2F%2F+Shape+%ED%83%80%EC%9E%85%EC%9D%98+%EA%B0%92%EB%93%A4%EC%9D%84+%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++let+circle+%3D+Shape%3A%3ACircle%282.0%29%3B%0A++++let+rectangle+%3D+Shape%3A%3ARectangle%283.0%2C+4.0%29%3B%0A++++let+triangle+%3D+Shape%3A%3ATriangle%283.0%2C+4.0%2C+5.0%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%84%93%EC%9D%B4%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95+%EB%84%93%EC%9D%B4%3A+%7B%7D%22%2C+area%28%26triangle%29%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%98+%EB%91%98%EB%A0%88%EB%A5%BC+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95+%EB%91%98%EB%A0%88%3A+%7B%7D%22%2C+perimeter%28%26triangle%29%29%3B%0A%0A++++%2F%2F+%EA%B0%81+%EB%8F%84%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EC%A7%80+%EC%B6%9C%EB%A0%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%0A++++println%21%28%22%EC%9B%90%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26circle%29%29%3B%0A++++println%21%28%22%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26rectangle%29%29%3B%0A++++println%21%28%22%EC%82%BC%EA%B0%81%ED%98%95%EC%9D%B4+%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B8%EA%B0%80%3F+%7B%7D%22%2C+is_square%28%26triangle%29%29%3B%0A%7D%0A
content_markdown: >
챕터 1 답안
- title: Hey
source: >- source: >-
/ferris_lofi.png /ferris_lofi.png
content_markdown: > content_markdown: |
CSW CSW
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment